Om en given string er "farlig" synes at blive undersøgt sådan her :
internal static bool IsDangerousString(string s, out int matchIndex)
{
int num2;
matchIndex = 0;
int num1 = 0;
Label_0005:
num2 = s.IndexOfAny(CrossSiteScriptingValidation.startingChars, num1);
if (num2 < 0)
{
return false;
}
if (num2 == (s.Length - 1))
{
return false;
}
matchIndex = num2;
char ch1 = s[num2];
if (ch1 <= 'O')
{
if (ch1 <= '<')
{
if (ch1 == '&')
{
if (s[num2 + 1] == '#')
{
return true;
}
goto Label_00BE;
}
if ((ch1 == '<') && (CrossSiteScriptingValidation.IsAtoZ(s[num2 + 1]) || (s[num2 + 1] == '!')))
{
return true;
}
goto Label_00BE;
}
if (ch1 == 'E')
{
goto Label_00B3;
}
if (ch1 == 'O')
{
goto Label_009D;
}
goto Label_00BE;
}
if (ch1 <= 'e')
{
if (ch1 == 'S')
{
goto Label_00A8;
}
if (ch1 == 'e')
{
goto Label_00B3;
}
goto Label_00BE;
}
if (ch1 != 'o')
{
if (ch1 == 's')
{
goto Label_00A8;
}
goto Label_00BE;
}
Label_009D:
if (CrossSiteScriptingValidation.IsDangerousOnString(s, num2))
{
return true;
}
goto Label_00BE;
Label_00A8:
if (CrossSiteScriptingValidation.IsDangerousScriptString(s, num2))
{
return true;
}
goto Label_00BE;
Label_00B3:
if (CrossSiteScriptingValidation.IsDangerousExpressionString(s, num2))
{
return true;
}
Label_00BE:
num1 = num2 + 1;
goto Label_0005;
}
og det ser ud til at den kaldes fra HttpRequest.ValidateString(...)
private void ValidateString(string s, string valueName, string collectionName)
{
s = this.RemoveNullCharacters(s);
int num1 = 0;
if (CrossSiteScriptingValidation.IsDangerousString(s, out num1))
{
string text1 = valueName + "=\"";
int num2 = num1 - 10;
if (num2 <= 0)
{
num2 = 0;
}
else
{
text1 = text1 + "...";
}
int num3 = num1 + 20;
if (num3 >= s.Length)
{
num3 = s.Length;
text1 = text1 + s.Substring(num2, num3 - num2) + "\"";
}
else
{
text1 = text1 + s.Substring(num2, num3 - num2) + "...\"";
}
throw new HttpRequestValidationException(HttpRuntime.FormatResourceString("Dangerous_input_detected", collectionName, text1));
}
}
en af de links der var i det jeg sendte før linkede til denne :
http://weblogs.asp.net/vga/archive/2003/05/02/6329.aspxsom beskriver lidt om hvad der valideres, og metoden til at validere collections ser ud til at være som følger :
private void ValidateNameValueCollection(NameValueCollection nvc, string collectionName)
{
int num1 = nvc.Count;
for (int num2 = 0; num2 < num1; num2++)
{
string text1 = nvc.GetKey(num2);
if (text1 != "__VIEWSTATE")
{
string text2 = nvc.Get(num2);
if ((text2 != null) && (text2.Length > 0))
{
this.ValidateString(text2, text1, collectionName);
}
}
}
}
jeg ved ikke om du kan få noget ud af det, men det kan jo være at der er et eller andet der springer dig i øjnene som relevant.
mvh