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" .