Impedir CSRF en un sitio web público sin inicio de sesión

1

Estoy trabajando en un proyecto web que permite a una persona enviar un formulario de solicitud a mi API. Cada visitante puede enviar una solicitud a través de ese formulario sin iniciar sesión.

Actualmente, la API genera un token cuando la página se abre por primera vez, y el token se envía de vuelta con el formulario de solicitud POST. Pero ese token puede usarse para enviar otra solicitud POST. Peor aún si un atacante conoce el token, puede enviar una solicitud POST con algún script sin visitar el sitio web más.

Actualmente invalido el token después de un período de tiempo. Pero en ese tiempo, el atacante puede enviar varias solicitudes con un script ajax. Tengo la intención de invalidar el token después de cada solicitud POST, pero eso no impide que el atacante envíe varias solicitudes POST porque también pueden solicitar un token nuevo antes de cada solicitud POST.

¿Hay alguna forma de evitar que un atacante envíe múltiples solicitudes desde un script malicioso sin utilizar el formulario en mi sitio web?

    
pregunta Viki Theolorado 20.04.2018 - 04:55
fuente

1 respuesta

1

En primer lugar, esto no es una falsificación de solicitud, ya que no hay sesión iniciada para aprovechar. No tiene mucho sentido engañar a un usuario para que envíe un formulario en su nombre.

Dicho esto, una cookie CSRF estándar haría el trabajo. Genere un valor único para la cookie que ya utiliza, en cada solicitud. Luego verifica que solo se use una vez.

    
respondido por el Geir Emblemsvag 20.04.2018 - 06:03
fuente

Lea otras preguntas en las etiquetas