¿Es una mala idea usar enctype="multipart / form-data"?

0

Si el formulario no tiene ninguna carga de archivo, solo usa enctype="multipart/form-data" en todas partes, ¿es una mala idea desde el punto de vista de la seguridad?

Aquí alguien dice, en 2007

  

Usando enctype="multipart/form-data"   crea una carga tanto binaria como ascii, por lo que hay una duplicación de   el tráfico. No tengo conocimiento de ningún otro problema. Sin embargo, parece   Me parece que permitir las cargas binarias puede crear algunos problemas de seguridad.

Además de enviar datos innecesarios al servidor, ¿cómo puede ser explotado?

    
pregunta Lynob 31.01.2018 - 17:19
fuente

1 respuesta

5
  

El uso de enctype="multipart / form-data" crea una carga binaria y ascii

Considero que esta afirmación es incorrecta. Hay application/x-www-form-urlencoded donde el cuerpo de la solicitud POST consiste en la misma cadena que se usaría después de ? en la URL si se usara una solicitud GET, es decir, de esta forma:

  POST /foo HTTP/1.1
  Content-type: application/x-www-form-urlencoded
  Content-length: ...
  ...
  foo=one&bar=two

Y luego está multipart/form-data , que es un mensaje MIME de varias partes donde cada parte consiste en el nombre de la clave que se encuentra en el encabezado y el cuerpo que contiene el valor:

  POST /foo HTTP/1.1
  Content-type: multipart/form-data; boundary=abcde
  Content-length: ...
  ...
  --abcde
  Content-Disposition: form-data; name=foo

  one
  --abcde
  Content-Disposition: form-data; name=bar

  two
  --abcde--

Cada parte solo se envía una vez y los datos binarios (como las cargas de archivos) se envían solo como binarios.

  

Además de enviar datos innecesarios al servidor, ¿cómo puede ser explotado?

Se pueden usar ambas formas con varias variaciones para intentar evitar los firewalls de aplicaciones web (WAF). Con application/x-www-form-urlencoded , por ejemplo, podría intentar jugar con codificación de URL en lugares inesperados (como la codificación de las claves, = o & ) con la esperanza de que WAF y el servidor interpreten los datos de manera diferente. O podría usar claves duplicadas, etc.

Con multipart/form-data uno podría probar algunas de estas variaciones también. Pero MIME ofrece aún más posibilidades, especialmente si una biblioteca se usa para el análisis, que también se usa para MIME en los correos. En este caso, se podría intentar jugar con límites innovadores, límites duplicados (donde el servidor y WAF podrían elegir uno diferente), tratar de usar Content-Transfer-Encoding etc. Sin embargo, un WAF mejor simplemente descartará cualquiera de estos intentos ya que los navegadores No emitir tales solicitudes.

    
respondido por el Steffen Ullrich 31.01.2018 - 18:15
fuente

Lea otras preguntas en las etiquetas