3

一部のページでいくつかの PageMethods ( でマークされたページ内の静的メソッド<WebMethod>) が定義されており、ajax 呼び出しを使用してそれらを呼び出します。サーバーへのこの POST は、送信されたデータが XSS の可能性があると見なされた場合に HttpRequestValidationException を発生させる ASP.NET コードをトリガーしないようです。

そのコードの詳細またはどこで見つけられるか知っている人はいますか? 私はMS AntiXssライブラリを調べましたが、実際に入力をチェックするのではなく、エンコーディングのみを行います.AFAIK.

編集:または、同様のチェックを行うコードまたはライブラリの方向を教えてください。

4

1 に答える 1

3

System.Web.HttpRequestValidationException が発生したときにスタック トレースを分析すると、それをスローしているコードを見つけることができます。

System.Web.HttpRequestValidationException (0x80004005): 潜在的に危険な Request.Form 値がクライアントから検出されました (IdentifierTextBox="

System.Web.HttpRequest.ValidateString (文字列値、文字列 collectionKey、RequestValidationSource requestCollection) で

Reflector を使用すると、ValidateString が次の呼び出しを行っていることがわかります。

internal static bool IsDangerousString(string s, out int matchIndex)
{
matchIndex = 0;
int startIndex = 0;
while (true)
{
    int num2 = s.IndexOfAny(startingChars, startIndex);
    if (num2 < 0)
    {
        return false;
    }
    if (num2 == (s.Length - 1))
    {
        return false;
    }
    matchIndex = num2;
    char ch = s[num2];
    if (ch != '&')
    {
        if ((ch == '<') && ((IsAtoZ(s[num2 + 1]) || (s[num2 + 1] == '!')) || ((s[num2 + 1] == '/') || (s[num2 + 1] == '?'))))
        {
            return true;
        }
    }
    else if (s[num2 + 1] == '#')
    {
        return true;
    }
    startIndex = num2 + 1;
}
}
于 2011-03-24T16:56:28.867 に答える