ASP.NET潜在危险请求Javascript Regex

ASP.NET potentially Dangerous Request Javascript Regex

本文关键字:请求 Javascript Regex 危险 NET ASP      更新时间:2023-09-26

当发布HTML或其他可能不安全的内容时,Microsoft的.NET Framework用于执行标准验证的正则表达式是什么,导致HttpRequestValidationException"从客户端检测到潜在危险的Request.Form值"。

我希望将它的精确副本转换为JavaScript,以便尽早提醒用户。

我当前的正则表达式(/(&#)|<[^<>]+>/)接近,但与.NET的不同

我知道不同的.NET版本可能会有所不同,所以我特别想知道:

  • .NET 2的正则表达式
  • .NET 4的正则表达式

您可以使用一些反编译工具,亲眼看到根本没有正则表达式。它调用静态方法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

此正则表达式遵循.NET4中的逻辑。

/^(?!(.|'n)*<[a-z!'/?])(?!(.|'n)*&#)(.|'n)*$/i

在.NET源代码中查找CrossSiteScriptingValidation,以查找Microsoft遵循的逻辑。fge是对的,它不使用regex,而是使用一些循环和字符串比较。我怀疑这是为了表演。