¿Por qué OWASP sugiere usar POST sobre PUT para subir archivos?

8

Al navegar por las recomendaciones de seguridad de OWASP para subir archivos , marqué la siguiente información:

  

Intente utilizar el método POST en lugar de PUT (o GET!)

No veo cómo un método es mejor que otro desde la perspectiva de la seguridad. ¿Podría alguien arrojar luz sobre este consejo?

    
pregunta Zenklys 18.01.2017 - 18:09
fuente

2 respuestas

4

TL; DR: PUT no es compatible con muchas cosas. A veces solo está disponible como una extensión, y habilitar las extensiones aumenta su superficie de ataque.

@iain tiene razón al comentar que la pregunta SO PUT vs POST en REST Es relevante aquí. Desde el punto de vista de RESTfulness, PUT está bien para actualizar o incluso sobrescribir un archivo.

Sin embargo, si discute desde el punto de vista de seguridad , los formularios HTML originales nunca admitieron PUT, solo GET y POST. Se puede encontrar mucha información sobre esto en ¿Los métodos PUT, DELETE, HEAD, etc. están disponibles en la mayoría de los navegadores web? , aunque hay información obsoleta y algunos enlaces están muertos. Así que lo resumiré aquí:

HTML

AJAX admite GET, POST, PUT e incluso BORRAR. Pero la forma común en un navegador no lo hace. HTML5 agregó soporte para PUT y DELETE en sus versiones de borrador, pero no se puede encontrar PUT o DELETE en la definición actual de infraestructura de HTML5 . En otras palabras, los navegadores no tienen la obligación de entender que <form method="PUT"> se ajusta a HTML5.

Servidores web

Tanto Apache como Nginx usan PUT y DELETE como extensiones WebDAV . Si desea fortalecer su servidor web, una cosa que hace a menudo es compilarlo sin las extensiones WebDAV. Agregar extensiones está aumentando la superficie de ataque.

Los frameworks por otro lado a menudo no soportamos PUT. O, más comúnmente, simplemente use la misma función para procesar POST y PUT, haciendo que el uso del verbo PUT sea lo mismo que POST.

Así que sí, la directriz OWASP tiene algún sentido. Aunque lo reescribiría como: "Si está implementando REST completo, use PUT, si no usa POST porque es más compatible" .

    
respondido por el grochmal 18.01.2017 - 22:51
fuente
1

No creo que esto deba estar en la lista, pero supongo que lo explican porque es la forma mejor y REST completa de hacer el archivo sin efectos secundarios *. Para ser honesto, no he visto a nadie haciendo PUT. He visto GET, pero eran como scripts de PHP por primera vez.

Vamos a poner PUT a un lado por un segundo. Si compara POST con GET, POST está más oculto para la perspectiva del usuario, ya que no se agrega a la URL visible.

Si envía otros datos junto con el archivo, es más probable que sea visible para el usuario que podría manipularlo. Sin embargo, esto no lo hace ni más ni más seguro, ya que de todos modos nunca debería confiar en la información del cliente.

*: los navegadores pueden truncar cadenas URI largas, por ejemplo

    
respondido por el Rápli András 18.01.2017 - 19:20
fuente

Lea otras preguntas en las etiquetas