it-swarm-es.com

¿Cuándo no debo utilizar la protección CSRF para un formulario?

De forma predeterminada, tengo protección CSRF para todos mis formularios que utilizan un token.

Sin embargo, noté otra aplicación web que tiene una función similar a uno de mis formularios. Y no utilizaron el token CSRF.

Así que asumí que no protegían contra el ataque CSRF para esa forma.

Entonces

pregunta 1) además del token CSRF, no debería haber otra forma de protegerse contra CSRF, ¿verdad?

Supongo que la respuesta es que esta es la única forma. por eso mi pregunta principal es

pregunta 2) ¿cuándo no debería utilizar la protección CSRF?

Conozco una posible instancia que es cuando el formulario POST está dirigido a URL externas.

Lo leí en Django docs .

¿Hay otros casos en los que no debería utilizar la protección CSRF o de forma innecesaria?

[~ # ~] actualizar [~ # ~]

a) otros métodos de protección CSRF incluyen la reautenticación del usuario

b) PUEDE escapar sin protegerse contra CSRF para POSTBACKs de formularios cuando no requiera que el usuario inicie sesión (vea las respuestas y comentarios de nbnh)

6
Kim Stacks

No, los tokens no son la única forma de protegerse de manera confiable contra CSRF.
De hecho, fue solo recientemente que las bibliotecas empaquetadas estaban lo suficientemente maduras como para justificar una recomendación, antes de que lanzar la suya propia tuviera una alta probabilidad de empeorar las cosas.

Otra forma de protegerse contra CSRF es la reautenticación. Es decir. pidiendo al usuario su contraseña nuevamente.
La ventaja de este enfoque es que la técnica es familiar para los desarrolladores y es poco probable que se estropee. La desventaja es que no es transparente para el usuario.
Hoy en día, con la mayoría de los marcos que tienen la protección incorporada y bibliotecas adicionales disponibles, yo diría que se prefieren los tokens CSRF ... pero no es la única forma.

En cuanto a la P # 2, como @nhnb escribió correctamente, si no se realizan modificaciones, podría estar bien omitir la protección.
Aunque considerando lo trivial que es en los marcos actuales, la transparencia del usuario y la sobrecarga mínima, probablemente sea mejor dejarlo y no luchar contra el código para eliminarlo ...

4
AviD

Sí, usar tokens es la única forma de protegerse de manera confiable contra los ataques CSRF.

El hecho de que se requiera una protección o no depende de las acciones que realice el programa con los datos enviados.

Como regla general: si los datos se modifican con los permisos o el contexto del usuario actual, necesita protección.

Si no se realizan modificaciones, puede estar bien no proteger. Un ejemplo común son los formularios de búsqueda y los resultados. Tenga en cuenta que el registro de las búsquedas realizadas por qué usuario es un tipo de modificación y, por lo tanto, el formulario debe protegerse.

7