2011-03-11 18 views
13

Ho guardato il flag [NE] (noescape) in mod_rewrite. Dopo un po 'di riflessione non sono riuscito a capire una situazione in cui vorrei NON voler usare la bandiera. Significato, sembra più utile mantenere il flag abilitato in quasi tutti gli RewriteRule. Non invocare questa bandiera mi ha causato problemi in alcune circostanze.mod_rewrite Flag NE - Quando è utile codificare caratteri speciali nell'URL?

La maggior parte delle regole che gestisco sono reindirizzamenti HTTP ([R]), piuttosto che passare attraverso.

Qualcuno farebbe luce su quando è utile avere mod_rewrite codificare l'URL?

È generalmente buona norma abilitare questo flag o utilizzare il comportamento predefinito di consentire a mod_rewrite di sfuggire questi caratteri speciali? Perché?

+3

Grande domanda, sono sorpreso che tu non abbia ancora risposte.E sono ancora più sorpreso che dozzine di risposte su SO di www a redirect non www (e viceversa) non aggiungano '[NE]' in 'RewriteRule'. Mi hai salvato la giornata, non riuscivo a capire perché il mio URL fosse codificato due volte durante il reindirizzamento di mod_rewrite. +1 –

risposta

1

Il flag [NE] è estremamente utile quando si aggiunge l'URL della richiesta come parte - diciamo - di una firma di autorizzazione.

Ho appena avuto un bug in cui l'autorizzazione stava funzionando con .htaccess disattivato ma non con esso attivo. Si è scoperto che la causa era che il reindirizzamento era l'url che codificava gli elementi che finivano nel parametro php $_GET. Per risolvere il bug ho cambiato:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*[^/0-9])$ $1/ [R=301,L] 

a

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*[^/0-9])$ $1/ [NE,R=301,L] 

(la firma di autorizzazione è composto di molte cose, uno di questi è la richiesta URL)

+2

Downvoter, eventuali commenti? –

+2

* "Qualcuno farebbe luce su' quando è utile avere mod_rewrite codificare l'URL? '" * – 5ervant

+0

@Server -Sto rispondendo alla parte del perché, "È generalmente buona norma abilitare questo flag, o usare il comportamento predefinito di permettere a mod_rewrite di sfuggire a questi caratteri speciali? Perché? " w un esempio. - Fondamentalmente condividendo un'esperienza con l'uso di questa bandiera. –

3

Se si guarda alla source code for mod_rewrite , noterai che imposta un flag proxy-nocanon se noescape è abilitato.

Nel revision where that line was first added, comprendeva anche questo commento:

assicurarsi che mod_proxy_http non canonicalizzare l'URI, e preservare qualsiasi (possibilmente qsappend'd) stringa di query nel nome del file per mod_proxy_http: proxy_http_canon ()

a seguito di questo, se si legge la mod_proxy documentation, vedrete la seguente menzione di nocanon:

Normalmente, mod_proxy canonizza gli URL ProxyPassed. Ma questo potrebbe essere incompatibile con alcuni backend, in particolare quelli che fanno uso di PATH_INFO. La parola chiave nocanon opzionale lo sopprime e passa il percorso URL "raw" al back-end. Nota che potrebbe influire sulla sicurezza del tuo back-end, in quanto rimuove la normale protezione limitata dagli attacchi basati su URL forniti dal proxy.

Sono possono essere confusi, ma che implica per me che l'uso di nocanon in mod_proxy (e per estensione noescape in mod_rewrite) ha potenziali ramificazioni di sicurezza. Questo spiegherebbe perché è disabilitato di default, anche se sembra che sarebbe più utile averlo abilitato nella maggior parte dei casi.