2011-03-11 10 views
13

He estado mirando la bandera [NE] (noescape) en mod_rewrite. Después de pensar un poco que no podría resolver una situación cuando quisiera NO quiero usar la bandera. Lo que significa que parece más útil mantener la bandera habilitada en casi cada RewriteRule. No invocar esta bandera me ha causado problemas en algunas circunstancias.mod_rewrite NE flag - ¿Cuándo es útil codificar caracteres especiales en la URL?

La mayoría de las reglas con las que trato son redireccionamientos HTTP ([R]), en lugar de pasar.

¿Alguien arrojaría alguna luz sobre cuando es útil tener mod_rewrite para codificar la URL?

¿Es generalmente una buena práctica habilitar esta bandera, o usar el comportamiento predeterminado de permitir que mod_rewrite escape estos caracteres especiales? ¿Por qué?

+3

Gran pregunta, me sorprende que todavía no hay respuestas.Y estoy aún más sorprendido de que docenas de respuestas sobre SO sobre www a redirecciones que no sean www (y viceversa) no agreguen '[NE]' en 'RewriteRule'. Me salvaste el día, no podía entender por qué mi URL se codificó dos veces durante las redirecciones mod_rewrite. +1 –

Respuesta

1

La bandera [NE] es extremadamente útil cuando agrega la url de solicitud como parte de, digamos, una firma de autorización.

Acabo de tener un error donde la autorización funcionaba con .htaccess apagado pero no con él. Resultó que la causa era que la redirección era la codificación de URL de los elementos que terminaban en el parámetro php $_GET. Para resolver el error he cambiado:

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 de autorización se compone de muchas cosas, una de ellas es la URL de solicitud)

+2

Downvoter, ¿algún comentario? –

+2

* "¿Alguien arrojaría algo de luz en cuanto a cuándo es útil tener mod_rewrite para codificar la URL?" "* – 5ervant

+0

@Servant - Estaba respondiendo por qué parte de," ¿Es generalmente una buena práctica habilitar esta bandera, o usar ¿el comportamiento predeterminado de permitir que mod_rewrite escape estos caracteres especiales? ¿Por qué? " w un ejemplo. - Básicamente compartir una experiencia con el uso de esta bandera. –

3

Si nos fijamos en la source code for mod_rewrite , observará que establece un indicador proxy-nocanon si está habilitado noescape.

En el revision where that line was first added, que también incluyó este comentario:

asegurarse de que no mod_proxy_http canonicalize el URI, y preservar cualquier (posiblemente qsappend'd) cadena de consulta en el nombre de archivo para mod_proxy_http: proxy_http_canon ()

a raíz de eso, si usted lee el mod_proxy documentation, verá la siguiente mención nocanon:

Normalmente, mod_proxy puede canonicalizar URL ProxyPassed. Pero esto puede ser incompatible con algunos backends, particularmente aquellos que hacen uso de PATH_INFO. La palabra clave nocanon opcional lo suprime y pasa la ruta de la URL "en bruto" al back-end. Tenga en cuenta que puede afectar la seguridad de su servidor, ya que elimina la protección limitada normal contra los ataques basados ​​en URL proporcionados por el proxy.

Estoy pueden confundirse, pero eso implica para mí que el uso de nocanon en mod_proxy (y por extensión en noescape mod_rewrite) tiene potenciales ramificaciones de seguridad. Eso explicaría por qué está deshabilitado de forma predeterminada, incluso si parece que sería más útil tenerlo habilitado en la mayoría de los casos.

Cuestiones relacionadas