2010-10-07 16 views
7

Estamos cargando cargas de archivos personalizadas en el extremo del servidor debido a limitaciones incorporadas.Carga de archivos HTML: hay una forma de forzar content-type = "application/octet-stream"

El código de carga de archivos HTML que se utiliza en un navegador Firefox:

<html> 
<body> 
    <form action="http:///192.168.1.1/upload.cgi" name="form_1" method="post" enctype="multipart/form-data" > 
     <input type="file" id="file" name="filename" content-type="application/octet-stream"> 
     <input type="submit" name="mysubmit" value="Send"> 
    </form> 
<body> 
</html> 

Si el archivo seleccionado se denomina "fish.jpg", el servidor recibe su tipo de contenido como "image/jpeg". Si el archivo se renombra a solo "fish" sin la extensión de archivo, el servidor recibe su tipo de contenido como "application/octet-stream" que es lo que queremos.

¿Hay alguna manera de forzar "application/octet-stream" en una página HTML (con o sin JavaScript normal)?

Gracias de antemano, Bert

+2

¿Por qué? Si va a tratar cualquier dato entrante como si fuera "Algunos bytes que podrían representar algo pero no sabemos qué", ¿por qué no simplemente ignorar el tipo de contenido que recibe en lugar de intentar obligar al navegador a reclamar que no lo hace? ¿Sabes lo que está enviando? – Quentin

Respuesta

1

¿Hay una manera de forzar "application/octet-stream" en una página HTML (con o sin regular de JavaScript)?

No debe establecer content-type en html de esa manera. Los chicos malos pueden subir fácilmente eso. El camino es hacer una validación adecuada del lado del servidor.

+1

¿Cómo se puede hacer una "validación adecuada del lado del servidor?" – rboarman

6

Nº No hay ningún atributo content-type="...". No puede influir en la selección del navegador del encabezado Content-Type en una subparte multipart/form-data, con o sin JavaScript.

¿Por qué es importante? Es una mala idea que una secuencia de comandos del servidor haga cualquier cosa con Content-Type, ya que a menudo es inexacta. El tratamiento de image/jpeg carga de forma diferente a application/octet-stream es algo que no debe hacerse, sobre todo porque un navegador puede optar por cargar un archivo JPEG como application/octet-stream o alguna otra cosa (en particular, IE generalmente le gusta enviar image/pjpeg).

Si controla el lado del servidor y obtener el tipo correcto de carga del archivo es fundamental, debe haber una interfaz para que el usuario lo seleccione manualmente. (Puede usar el sniffing de la extensión de archivo de JavaScript y/o Content-Type para establecer un valor predeterminado, pero no confíe en ninguno.)

Cuestiones relacionadas