验证请求的 ASP.NET 类是System.Web.CrossSiteScriptingValidation
,而您想要的方法是IsDangerousString
。不幸的是,两者都标记为internal
,因此您无法直接访问它们。你有几个选择:
选项 1:IsDangerousString
通过反射调用。但是,Microsoft 可以随时更改方法,这会破坏您的应用程序。
选项2:反编译IsDangerousString
并将其复制到您自己的应用程序中。请参阅下面的代码。
选项 3:调用Membership.GeneratePassword
。这将返回一个保证通过请求验证的密码。
ASP.NET 类的摘录CrossSiteScriptingValidation
(通过 .NET Reflector):
private static char[] startingChars = new char[] { '<', '&' };
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;
}
}
private static bool IsAtoZ(char c)
{
return (((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')));
}