我在某些页面上定义了一些 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/