mercoledì 16 maggio 2012

Browser codifica URL e la richiesta di convalida sito la magia nera


Permettetemi di porre una domanda: Qual è la differenza tra questi due URL:
  1. http:// [mydomain] /? foo = <script>
  2. http:// [mydomain] /? foo = <script>
Niente, giusto? Facciamo spina in due diversi browser e vedere cosa pensano:
SNAGHTML8f52385
Internet Explorer che causa un errore del server
Ok, ora è solo diventando strano e questo mi porta al tema del giorno: Recentemente un sostenitore amichevole ASafaWeb mi ha contattato e ha detto Naturalmente la "Ehi, come mai ASafaWeb non è corretta identificazione che il mio sito sta gettando errori personalizzati?" prima cosa che ho fatto è stato quello di eseguire una scansione sul sito, utilizzando il mio preferito Google-source browser:
Tutto segnalazione ASafaWeb è ok
Ho poi un doppio controllato manualmente nel browser e si mise a raccontare la sostenitore suddetta amichevole che si era sbagliato. Come probabilmente è ormai evidente dalla schermata del browser prende in precedenza, questa era una mossa sbagliata.
Facciamo scavare un po 'più in profondità le richieste HTTP entrambi i browser di cui sopra stanno generando Fiddler e vedere cosa ha da dire. La mia aspettativa era che l'intestazione dell'agente utente è stato la causa del diverso comportamento, ma si scopre che non era il caso:
Fiddler mostrando codifica URL Chrome
Vedi questo? Chrome sfugge personaggi URL illegali, mentre IE passa allegramente attraverso il server indisturbati. Si tratta di Chrome 17 e IE9 - è del tutto possibile che altre versioni presentano comportamenti diversi.
Così la prima metà di questa storia è interessante nella misura in cui i diversi browser possono fare richieste diverse esattamente con lo stesso URL nella barra degli indirizzi. La seconda metà della storia è che la richiesta di convalida può o non può sparare quando la stringa di query viene codificato. Per esempio, ecco un altro sito caricato in Chrome:
Richiesta di convalida sparare su un altro sito in Chrome
In questo caso, la convalida delle richieste sta sparando contro la codificato tag <script> e la restituzione di un HTTP 500. Se guardiamo indietro un po 'prima di tale traccia Fiddler, il sito in questione stava rientrando 404 - letteralmente trattati il tag codificato come un percorso per il quale non riusciva a trovare alcun contenuto. Perché accade questo?Accidenti bella domanda, mi piacerebbe conoscere la risposta! La mia ipotesi migliore è che questo non è un comportamento ASP.NET e invece c'è un web application firewall (WAF), seduta di fronte al server e inviare la richiesta via come un 404. Perché dovrebbe farlo con valori non codificati da non codificati è al di là di me.
In termini di ASafaWeb, faccio un uso estensivo della classe Uri che per impostazione predefinita, codifica i caratteri illegali nel indirizzo. Come sappiamo, per qualche sconosciutomotivo questo non può causare richiesta di convalida al fuoco che a sua volta non può invocare gli errori personalizzati, che a sua volta non può illustrare che sono stati configurati in modo errato. Come risultato, l'URI deve essere costruito senza fuggire il che significa che con il Uri (String, Boolean) in cui il costruttore è un parametro booleano "dontEscape":
var uri = nuova Uri ( "http:// [mydomain] / foo = <script>?" , true );
Purtroppo, questo costruttore è obsoleto. Allo stesso modo, purtroppo, non sembra essere una bella alternativa a breve di non utilizzare la classe Uri e poi movimentazione manuale URL sotto forma di stringhe il che significa che ogni sorta di altro dolore. Così ho usato comunque e ASafaWeb ora riporta correttamente lo stato del sito in questione come segue:
ASafaWeb identificare correttamente la configurazione di errore personalizzato
Molto strano e alla fine un po ', ma hacky gesso che come un altro edge-caso che ASafaWeb possono ora gestire correttamente.

Nessun commento:

Posta un commento