2012-01-05 8 views
5

Microsoftの.NET FrameworkがHttpRequestValidationExceptionという結果をもたらす標準的な検証を実行するために使用するregular expressionとは何ですか?HTMLなどの潜在的に危険なときに潜在的に危険なRequest.Form値が検出されましたコンテンツが投稿されます。ASP.NET潜在的に危険なリクエストJavascript正規表現

私はの正確なコピーをJavaScriptに変換して、ユーザーに早期に警​​告することができます。

私の現在の正規表現(/(&#)| < [^ <]]は、近いですが、.NETと同じではありません。

私は特に私が知りたいのですが、これは別の.NETバージョンの異なる場合があります知っています:

  • .NET 4
  • の.NET 2
  • 正規表現のための正規表現
+1

私は非常に、regexesが意味する唯一の構成要素であることを疑う - それを検出する... – fge

答えて

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; 
} 
3

私はここに別の質問でこれに答えている場合があります:この正規表現は.NEでロジックを次の https://stackoverflow.com/a/4949339/62054

T 4.

CrossSiteScriptingValidationの.NETソースを参照して、Microsoftが従うロジックを見つけます。 fgeは正しいですが、正規表現を使用せず、代わりにいくつかのループと文字列の比較を使用します。私はそれがパフォーマンスのためだと思う。

関連する問題