¿Cuál es la necesidad del token de seguridad para evitar el ataque CSRF?

5

Tengo una API REST que se ejecuta en un dominio y tengo un cliente en otro dominio. Para evitar CSRF, he configurado la API REST para aceptar la solicitud originada solo desde la aplicación cliente. He añadido la codificación adecuada según la hoja de trucos de prevención XSS de owasp para evitar cualquier ataque XSS en mi aplicación. ¿Puedo decir que mi API REST está a salvo de un ataque CSRF? ¿Incluso necesito un token de sincronizador para hacer que mi API sea segura?

De acuerdo con mi comprensión de CSRF o XSS, el ataque puede llevar a un ataque de CSRF, ya que estoy evitando que ambos sean vulnerables a CSRF.

    
pregunta MShah 21.10.2013 - 13:44
fuente

2 respuestas

6

Para evitar CSRF, el método más eficaz es proporcionar un token CSRF junto con cada solicitud. Este es un token que se genera en el lado del servidor y se asocia con una sesión en particular. Luego, cada vez que la sesión envíe una solicitud, el código del lado del servidor verificará para confirmar que se envió el token CSRF correcto. Si no fue así, se ha producido un ataque CSRF y la solicitud será rechazada.

Muchas veces estos tokens se almacenan en campos ocultos, pero si estás usando una API REST, sospecho que estás haciendo muchas llamadas AJAX y este probablemente no sea el mejor método. Sugeriría crear una variable javascript global que se inicialice con el token CSRF una vez y luego se acceda cada vez que se envíe una solicitud. Si está utilizando algo como jQuery, es bastante fácil incluir otro parámetro de solicitud en todas las llamadas AJAX, por lo que esta también podría ser una opción. Este último es típicamente lo que hago, y crea un código mucho más limpio.

Aquí hay un enlace a la hoja de trucos de prevención CSRF de OWASP. Recomendaría leerlo.

    
respondido por el Abe Miessler 21.10.2013 - 17:38
fuente
5

¿Supongo que está autentificando solicitudes utilizando una cookie de sesión?

La verificación del encabezado de origen es una defensa CSRF válida, por lo que no necesita un token anti-CSRF. El soporte del navegador para el encabezado de origen es bastante bueno. Pero para estar seguro, debe rechazar las solicitudes sin un encabezado de origen, lo que bloqueará los navegadores no compatibles.

Hay mucha confusión en torno a CSRF y XSS. Es cierto que los ataques XSS pueden pasar por alto la protección CSRF. Sin embargo, esto es un tanto engañoso. Los ataques XSS pueden llevar a todo tipo de cosas malas, y omitir CSRF es solo uno de estos. Usted tiene toda la razón para protegerse contra los ataques XSS.

Así que tu diseño es básicamente bueno. Sin embargo, para responder si su aplicación es vulnerable, también necesita confirmar que su implementación es buena. Si tiene presupuesto, contrate a una compañía de pruebas de penetración para verificar esto.

    
respondido por el paj28 21.10.2013 - 14:02
fuente

Lea otras preguntas en las etiquetas