filtrando contenido en el encabezado de disposición de contenido

4

Estaba leyendo "The Tangled Web" (un libro que estoy disfrutando mucho) y tengo una duda en el siguiente extracto extraído de él: -

When Handling User-Controlled Filenames in Content-Disposition Headers
 If you do not need non-Latin characters: Strip or substitute any characters except for alpha- numerics, “.”, “-”, and “_”. To protect your users against potentially harmful or deceptive filenames, you may also want to confirm that at least the first character is alphanumeric and substitute all but the rightmost period with something else (e.g., an underscore).
Keep in mind that allowing quotes, semicolons, backslashes, and control characters (0x00–0x1F) will introduce vulnerabilities.
 If you need non-Latin names: You must use RFC 2047, RFC 2231, or URL-style percent encoding in a browser-dependent manner. Make sure to filter out control characters (0x00–0x1F) and escape any semicolons, backslashes, and quotes.
  • ¿Cuáles son los caracteres que deben codificarse en porcentaje de URL?
  • Al "escapar con punto y coma, barras diagonales inversas y comillas", ¿se escapan utilizando barras diagonales inversas?
pregunta 29.10.2012 - 16:36
fuente

2 respuestas

3

Permitir una entrada controlada por el usuario en el encabezado HTTP es muy peligroso. Tendría una lista blanca estricta de valores posibles.

Además, el escape no siempre se hace con una barra invertida. Las barras invertidas a veces se aplican a los datos citados, pero siempre. En este caso, una entidad HTML o codificación de URL sería segura.

    
respondido por el rook 29.10.2012 - 17:04
fuente
4
  

Si necesita nombres no latinos: debe usar RFC 2047, RFC 2231 o codificación de porcentaje de estilo de URL de una manera dependiente del navegador. Asegúrate de filtrar los caracteres de control (0x00–0x1F) y escapar de cualquier punto y coma, barras invertidas y comillas.

Ni siquiera vayas allí. Oculto detrás de las palabras "dependiente del navegador" hay un conjunto de reglas de escape inconsistentes e incompletas que varían enormemente entre los navegadores. Rastrear el tipo de navegador y proporcionar una codificación diferente para diferentes casos no es realmente factible en absoluto ... incluso si lo hizo (y manejó Vary / cache adecuadamente para que coincidiera), hay caracteres que son imposibles de codificar para cada uno de los navegadores.

  

¿Cuáles son los caracteres que deben codificarse en porcentaje de URL?

En IE, ; , " y cualquier cosa que no sea ASCII. En cualquier otro navegador, el porcentaje de codificación en Content-Disposition no es efectivo.

  

Por "escapar de puntos y comas, barras invertidas y comillas", ¿escapar significa "barras invertidas"?

Sí, pero solo Opera admite esto correctamente IIRC.

Eventualmente, las reglas de RFC 6266 solucionarán este lío espeluznante, pero el soporte aún no existe. Si desea caracteres Unicode arbitrarios en el nombre de archivo de descarga, la única forma confiable de hacerlo es poner el nombre de archivo falso en una parte final de la ruta de la URL, codificada en UTF-8-URL (estilo IRI), por ejemplo :.<< p>

http://www.example.com/download.cgi/h%c3%a9llo%20%e6%97%a5%e6%9c%ac.dat

da como resultado la descarga del nombre de archivo héllo 日本.dat .

    
respondido por el bobince 30.10.2012 - 11:05
fuente

Lea otras preguntas en las etiquetas