![](/img/trans.png)
[英]client side validation for asp.net mvc “A potentially dangerous Request.Form…
[英]ASP.NET potentially Dangerous Request Javascript Regex
什么是Microsoft .NET Framework用於執行標准驗證的正則表達式 ,該標准驗證導致HttpRequestValidationException“當發布HTML或其他可能不安全的內容時,從客戶端檢測到潛在危險的Request.Form值”。
我希望將它的精確副本轉換為JavaScript,以便提前通知用戶。
我當前的正則表達式(/(&#)| <[^ <>] +> /)很接近,但與.NET不同。
我知道這對於不同的.NET版本可能會有所不同,所以我特別想知道:
你可以使用一些decompilig工具,親眼看看根本沒有正則表達式。 它調用靜態方法CrossSiteScriptingValidation.IsDangerousString
。
但也許您可以使用Microsoft AntiXSS庫來實現相同的目標。 無論如何這里是方法:
internal static bool IsDangerousString(string s, out int matchIndex)
{
matchIndex = 0;
int num1 = 0;
int num2 = s.IndexOfAny(CrossSiteScriptingValidation.startingChars, num1);
if (num2 < 0)
{
return false;
}
if (num2 == s.Length - 1)
{
return false;
}
matchIndex = num2;
char chars = s.get_Chars(num2);
if ((chars == 38 || chars == 60) && (CrossSiteScriptingValidation.IsAtoZ(s.get_Chars(num2 + 1)) || s.get_Chars(num2 + 1) == 33 || s.get_Chars(num2 + 1) == 47 || s.get_Chars(num2 + 1) == 63))
{
return true;
}
else
{
if (s.get_Chars(num2 + 1) == 35)
{
return true;
}
}
num1 = num2 + 1;
}
我可能在另一個問題中回答了這個問題: https : //stackoverflow.com/a/4949339/62054
這個正則表達式遵循.NET 4中的邏輯。
/^(?!(.|\n)*<[a-z!\/?])(?!(.|\n)*&#)(.|\n)*$/i
查看.NET源代碼中的CrossSiteScriptingValidation以查找Microsoft遵循的邏輯。 fge是對的,它不使用正則表達式,而是使用一些循環和字符串比較。 我懷疑這是為了表現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.