Cómo prevenir ataques CSRF

Actualmente existen tres estrategias principales para defenderse contra los ataques CSRF: verificar el campo HTTPReferer; agregar token a la dirección de solicitud y verificarlo, personalizar los atributos en el encabezado HTTP y verificarlo.

(1) Verifique el campo HTTPReferer Según el protocolo HTTP, hay un campo llamado Referer en el encabezado HTTP, que registra la dirección de origen de la solicitud HTTP. En circunstancias normales, la solicitud para acceder a una página restringida segura proviene del mismo sitio web. Por ejemplo, si necesita acceder a http://bank.example/withdraw?account=bobamp;amount=1000000amp;for=Mallory, el usuario. Primero debe iniciar sesión en el banco, por ejemplo, y luego activar el evento de transferencia haciendo clic en un botón en la página. En este momento, el valor de referencia de la solicitud de transferencia será la URL de la página donde se encuentra el botón de transferencia, generalmente la dirección que comienza con el nombre de dominio bank.example. Si un hacker quiere llevar a cabo un ataque CSRF en el sitio web de un banco, solo puede crear una solicitud en su propio sitio web. Cuando un usuario envía una solicitud al banco a través del sitio web del hacker, el referente de la solicitud apunta al propio hacker. sitio web. (2) Agregue un token a la dirección de la solicitud y verifique que el ataque CSRF sea exitoso porque los piratas informáticos pueden falsificar completamente la solicitud del usuario. Toda la información de verificación del usuario en la solicitud existe en la cookie, por lo que el pirata informático puede hacerlo sin saberlo. información, utiliza directamente la propia cookie del usuario para pasar la verificación de seguridad. La clave para resistir CSRF es incluir información en la solicitud que los piratas informáticos no puedan falsificar y que esa información no exista en la cookie. (3) La personalización de atributos en el encabezado HTTP y la verificación de este método también utilizan tokens para la verificación. A diferencia del método anterior, el token no se coloca en la solicitud HTTP en forma de parámetros, sino que se coloca en un atributo personalizado en el. Encabezado HTTP. A través de la clase XMLHttpRequest, puede agregar el atributo de encabezado HTTP csrftoken a todas las solicitudes de este tipo a la vez y ponerle el valor del token. Esto resuelve el inconveniente de agregar tokens a la solicitud en el método anterior. Al mismo tiempo, la dirección solicitada a través de XMLHttpRequest no se registrará en la barra de direcciones del navegador y no hay necesidad de preocuparse de que el token se filtre a otros sitios web. a través del Referidor.

Principio de ataque CSRF 1. El usuario C abre el navegador, visita el sitio web confiable A, ingresa el nombre de usuario y la contraseña para solicitar iniciar sesión en el sitio web A. 2. Después de verificar la información del usuario, el sitio web A genera; información de la cookie y la devuelve al navegador, en este momento el usuario inicia sesión correctamente en el sitio web A y puede enviar solicitudes al sitio web A normalmente. 3. Antes de que el usuario salga del sitio web A, abre una página TAB en el mismo navegador para visitar el sitio web B; 4. El sitio web B recibe la solicitud del usuario. Luego, se devuelve algún código ofensivo y se realiza una solicitud para acceder al sitio de terceros A;