asp.net - 在哪里可以找到或复制产生 HttpRequestValidationException 的代码

标签 asp.net ajax xss

我在某些页面上定义了一些 PageMethods(标有 <WebMethod> 的页面中的静态方法),并使用 ajax 调用来调用它们。如果发送的数据被认为可能是 XSS,则向服务器发送的此 POST 显然不会触发 ASP.NET 代码,该代码会引发 HttpRequestValidationException,因此我想复制该检查代码以在我的页面方法中运行它。

有人知道该代码的详细信息或在哪里可以找到它吗?我查看了 MS AntiXss 库,但它只进行编码,而不是实际检查输入,AFAIK。

编辑:或者向我指出进行类似检查的代码或库的方向。

最佳答案

分析引发 System.Web.HttpRequestValidationException 时的堆栈跟踪,我们可以找出引发该异常的代码。

System.Web.HttpRequestValidationException (0x80004005): 从客户端检测到潜在危险的 Request.Form 值 (IdentifierTextBox="

在 System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection)

使用 Reflector,我们发现 ValidateString 正在调用:RequestValidator.Current.IsValidRequestString,后者又调用 CrossSiteScriptingValidation.IsDangerousString,即:

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;
}
}

关于asp.net - 在哪里可以找到或复制产生 HttpRequestValidationException 的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/493909/

相关文章:

javascript - 使用连字符的跨站点脚本 (XSS)

JavaScript 到 Microsoft SQL Server(AJAX 请求)

javascript - 在 AngularJS 框架范围内的页面加载时调用 Web 服务

jquery - 将数据发布到新的弹出窗口,而不使用隐藏的输入字段

javascript - 如何发出 AJAX 请求以发布 JSON 数据并处理响应

javascript - 托管在不同域上的 JavaScript 可以读取/修改另一个域的 DOM 吗?

asp.net - 关于 ASP.NET MVC3 正在使用它的 ajax 助手和呈现不显眼的 javascript 做什么,是否有一个很好的解释?

c# - 如何检查 ContentPlaceHolder 是否为空?

asp.net - 如何在不使用 EF 的情况下实现 PATCH HTTP 方法

javascript - 如何通过注入(inject)脚本修改/扩展 javascript 函数?