簡體   English   中英

ASP.NET潛在危險請求Javascript正則表達式

[英]ASP.NET potentially Dangerous Request Javascript Regex

什么是Microsoft .NET Framework用於執行標准驗證的正則表達式 ,該標准驗證導致HttpRequestValidationException“當發布HTML或其他可能不安全的內容時,從客戶端檢測到潛在危險的Request.Form值”。

我希望它的精確副本轉換為JavaScript,以便提前通知用戶。

我當前的正則表達式(/(&#)| <[^ <>] +> /)很接近,但與.NET不同。

我知道這對於不同的.NET版本可能會有所不同,所以我特別想知道:

  • .NET 2的正則表達式
  • .NET 4的正則表達式

你可以使用一些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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM