Tengo un sitio que trata "/" y "% 2F" en la parte de ruta (no la cadena de consulta) de una URL de manera diferente. ¿Es esto algo malo de hacer según RFC o el mundo real?Es una barra inclinada ("/") equivalente a una barra diagonal codificada ("% 2F") en la parte de ruta de una URL HTTP
Lo pregunto porque sigo encontrando pequeñas sorpresas con el framework web que estoy usando (Ruby on Rails) y las capas debajo de eso (Passenger, Apache, por ejemplo, tuve que habilitar "ALLOW_ENCODED_SLASHES" para Apache) . Ahora me inclino por deshacerme por completo de las barras codificadas, pero me pregunto si debería estar presentando informes de errores donde veo un comportamiento extraño que involucra las barras codificadas.
cuanto a por qué tengo las barras codificadas en primer lugar, básicamente, tienen rutas como esta:
:controller/:foo/:bar
donde: foo es algo así como un camino que puede contener barras. Pensé que lo más sencillo sería escanear el URL foo
para que el mecanismo de enrutamiento no tenga en cuenta las barras oblicuas. Ahora estoy teniendo dudas, y está bastante claro que los frameworks realmente no lo soportan, pero de acuerdo con el RFC ¿está mal hacerlo de esta manera?
Aquí hay alguna información que he reunido:
RFC 1738 (URL):
Por lo general, una URL tiene la misma interpretación cuando un octeto está representado por un personaje y cuando se codifica. Sin embargo, esto no es cierto para los caracteres reservados: la codificación de un carácter reservado para un esquema particular puede cambiar la semántica de una URL.
RFC 2396 (URI):
Estos caracteres se llama "reservados", ya que su uso dentro del componente URI se limita a su propósito reservado. Si los datos de un componente URI entrarían en conflicto con el propósito reservado, entonces los datos en conflicto se deben escapar antes de formar el URI.
(qué escapar aquí media algo más que codifica el carácter reservado?)
RFC 2616 (HTTP/1.1):
caracteres distintos a los de la "reservado" y "inseguro "conjuntos (ver RFC 2396 [42]) son equivalentes a su codificación"% "HEX HEX".
Existe también this bug report de rieles, donde parecen esperar que la barra codificada a comportarse de manera diferente:
derecho, me gustaría esperar resultados diferentes porque están apuntando a diferentes recursos.
Está buscando el archivo literal 'foo/bar' en el directorio raíz. La versión no escapada está buscando la barra de archivos dentro del directorio foo.
Está claro desde las RFC que la cruda versus codificada es el equivalente para caracteres sin reserva, pero ¿cuál es la historia para los caracteres reservados?
Relacionados: http://stackoverflow.com/q/14631200/1591669 – unor
PHP Los usuarios que usan un controlador frontal: $ _GET y $ _REQUEST ya están urldecoded. Esto podría causar problemas con barras diagonales, ya que no podrá distinguir qué era una barra diagonal, y qué era un% 2F. Si necesita ver la solicitud tal como fue enviada, busque en $ _SERVER ['REQUEST_URI']. Ver también [urldecode() @ php.net] (http://php.net/manual/en/function.urldecode.php) –