2012-01-05 13 views
5

Qual è il regular expression utilizzato da Microsoft .NET Framework per eseguire la convalida standard che risulta in HttpRequestValidationException "È stato rilevato un valore Request.Form potenzialmente pericoloso dal client" quando HTML o altri potenzialmente non sicuri il contenuto è pubblicato.ASP.NET potenzialmente pericolosa Richiesta Javascript Regex

Mi piacerebbe avere una copia esatta convertita in JavaScript in modo che l'utente possa essere avvisato in anticipo.

La mia espressione regolare corrente (/ (& #) | < [^ <>] +> /) è chiusa, ma non uguale a .NET.

Sono consapevole che questo potrebbe essere diverso per le diverse versioni di .NET in modo particolare mi piacerebbe sapere:

  • Un'espressione regolare per NET 2
  • Un'espressione regolare per .NET 4
+1

Dubito molto che le regex siano l'unica componente implicata - se non del tutto - da rilevare che ... – fge

risposta

4

È possibile utilizzare alcuni strumenti di decompilazione e verificare personalmente che non esiste alcuna espressione regolare. Chiama il metodo statico CrossSiteScriptingValidation.IsDangerousString.

Ma forse è possibile utilizzare la libreria Microsoft AntiXSS per ottenere lo stesso. Ad ogni modo ecco il metodo:

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

l'avrei risposto a questa domanda in un altro qui: https://stackoverflow.com/a/4949339/62054

questa espressione regolare segue la logica in .NE T 4.

Cercare nella sorgente .NET per CrossSiteScriptingValidation per trovare la logica seguita da Microsoft. fge ha ragione, non usa un'espressione regolare, invece usa alcuni cicli e confronti tra stringhe. Sospetto che sia per le prestazioni.

Problemi correlati