Анализируя трассировку стека при возникновении исключения System.Web.HttpRequestValidationException, мы можем выяснить, какой код его генерирует.
System.Web.HttpRequestValidationException (0x80004005): потенциально опасное значение Request.Form было обнаружено от клиента (IdentifierTextBox = "
в System.Web.HttpRequest.ValidateString (строковое значение, 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;
}
}