0

/?-^%{}[];$=*`#|&@'\"<>()+,\ のような文字を除外する必要があります。クエリにある場合は、これを空の文字列に置き換える必要がありますstring. Please help me out. ASP ページで使用しています。

4

3 に答える 3

2

最良のアイデアは、次のような関数を使用することです。

Public Function MakeSQLSafe(ByVal sql As String) As String
    'first i'd avoid putting quote chars in as they might be valid? just double them up.
    Dim strIllegalChars As String = "/?-^%{}[];$=*`#|&@\<>()+,\"
    'replace single quotes with double so they don't cause escape character
    If sql.Contains("'") Then
        sql = sql.Replace("'", "''")
    End If
    'need to double up double quotes from what I remember to get them through
    If sql.Contains("""") Then
        sql = sql.Replace("""", """""")
    End If
    'remove illegal chars
    For Each c As Char In strIllegalChars
        If sql.Contains(c.ToString) Then
            sql = sql.Replace(c.ToString, "")
        End If
    Next

    Return sql
End Function

これはテストされておらず、おそらくもっと効率的になる可能性がありますが、うまくいくはずです。アプリで SQL を実行する場所はどこでも、この関数で SQL をラップして、実行前に文字列をクリーンアップします。

ExecuteSQL(MakeSQLSafe(strSQL))

それが役立つことを願っています

于 2009-04-08T11:05:06.957 に答える
0

他の文字列のサニタイズと同様に、許可されていない文字のブラックリストではなく、許可される文字を指定するホワイトリストを使用する方がはるかに優れます

HTMLタグのフィルタリングに関するこの質問の結果、ホワイトリストと照合するために正規表現を使用することを提案する回答が受け入れられました。特定のホワイトリストを除くすべてのHTMLタグをフィルタリングするにはどうすればよいですか。-私はあなたが非常に似たようなことをすることを提案します。

于 2009-04-08T11:27:16.090 に答える
0

URL ルーティングを使用していますが、これがうまく機能することがわかりました。URL の各部分をこの関数に渡します。「&」などの文字を「and」に変換するので必要以上ですが、必要に応じて変更できます。

public static string CleanUrl(this string urlpart) {

    // convert accented characters to regular ones
    string cleaned = urlpart.Trim().anglicized();

    // do some pretty conversions
    cleaned = Regex.Replace(cleaned, "&nbsp;", "-");
    cleaned = Regex.Replace(cleaned, "#", "no.");
    cleaned = Regex.Replace(cleaned, "&", "and");
    cleaned = Regex.Replace(cleaned, "%", "percent");
    cleaned = Regex.Replace(cleaned, "@", "at");

    // strip all illegal characters like punctuation
    cleaned = Regex.Replace(cleaned, "[^A-Za-z0-9- ]", "");

    // convert spaces to dashes
    cleaned = Regex.Replace(cleaned, " +", "-");

    // If we're left with nothing after everything is stripped and cleaned
    if (cleaned.Length == 0)
        cleaned = "no-description";

    // return lowercased string
    return cleaned.ToLower();
}

// Convert accented characters to standardized ones
private static string anglicized(this string urlpart) {
    string beforeConversion = "àÀâÂäÄáÁéÉèÈêÊëËìÌîÎïÏòÒôÔöÖùÙûÛüÜçÇ’ñ";
    string afterConversion = "aAaAaAaAeEeEeEeEiIiIiIoOoOoOuUuUuUcC'n";

    string cleaned = urlpart;

    for (int i = 0; i < beforeConversion.Length; i++) {
         cleaned = Regex.Replace(urlpart, afterConversion[i].ToString(), afterConversion[i].ToString());
    }
    return cleaned;

    // Spanish : ÁÉÍÑÓÚÜ¡¿áéíñóúü"

}
于 2009-04-13T20:48:14.973 に答える