Analizziamo cosa sta succedendo qui guardando il codice WebForms di ASP.NET.
Primo esempio, w / o =1
[HttpRequestValidationException (0x80004005): A potentially dangerous Request.QueryString value was detected from the client (="alert(1)c__DisplayClass280_0.b__0(String key, String value) +22
System.Web.HttpValueCollection.EnsureKeyValidated(String key) +9904693
System.Web.HttpValueCollection.GetValues(String name) +17
System.Web.UI.Page.DeterminePostBackMode() +99
Se eseguiamo il codice, possiamo vedere che l'eccezione ha origine in EnsureKeyValidated
, ma possiamo arrivarci da GetValues
, da DeterminePostBackMode
. Quindi se controlli qui vediamo questo:
string[] values = nameValueCollection.GetValues((string) null);
quindi sembra che quello che otteniamo qui stia recuperando tutti i valori privi di chiave. Quindi la query precedente potrebbe essere riscritta nel formato null=<script>alert(313)</script>&
. Quindi lo script viene passato al valore per una chiave null / vuota .
Secondo esempio, w / =1
Qui fai che il tasto sia uguale allo script e il valore per quella chiave sia 1. Le chiavi sono codificate prima di essere passate al server quindi questo non sarebbe un problema.
Sevuoireplicarel'errore,potrestipassarea=<script>alert(313)</script>
eotterrestilostessoerroreappenaprovenientedaunluogodiverso:
[HttpRequestValidationException(0x80004005):ApotentiallydangerousRequest.QueryStringvaluewasdetectedfromtheclient(a="alert(1)c__DisplayClass280_0.b__0(String key, String value) +22
System.Web.HttpValueCollection.EnsureKeyValidated(String key) +9904693
System.Web.HttpValueCollection.GetValues(Int32 index) +29
System.Web.HttpValueCollection.ToString(Boolean urlencoded, IDictionary excludeKeys) +206
System.Web.UI.Page.get_ClientQueryString() +411
Se è necessario, è possibile controllare ciò che è negato .