Saltar al contenido

¿Cuál es el punto del encabezado X-Requested-With?

Si hallas algún fallo con tu código o proyecto, recuerda probar siempre en un ambiente de testing antes añadir el código al trabajo final.

Solución:

Una buena razón es la seguridad: esto puede evitar ataques CSRF porque este encabezado no se puede agregar al dominio cruzado de solicitud AJAX sin el consentimiento del servidor a través de CORS.

Solo se permiten los siguientes encabezados entre dominios:

  • Aceptar
  • Aceptar-Idioma
  • Contenido-Idioma
  • ID del último evento
  • Tipo de contenido

cualquier otro hace que se emita una solicitud “previa al vuelo” en los navegadores compatibles con CORS.

Sin CORS no es posible agregar X-Requested-With a una solicitud XHR entre dominios.

Si el servidor verifica que este encabezado esté presente, sabe que la solicitud no se inició desde el dominio de un atacante que intenta realizar una solicitud en nombre del usuario con JavaScript. Esto también verifica que la solicitud no se envió desde un formulario HTML regular, del cual es más difícil verificar que no sea un dominio cruzado sin el uso de tokens. (Sin embargo, revisando el Origin El encabezado podría ser una opción en los navegadores compatibles, aunque dejará vulnerables a los navegadores antiguos).

Nuevo bypass de Flash descubierto

Es posible que desee combinar esto con un token, porque Flash que se ejecuta en Safari en OSX puede configurar este encabezado si hay un paso de redirección. Parece que también funcionó en Chrome, pero ahora está solucionado. Más detalles aquí, incluidas las diferentes versiones afectadas.

OWASP recomienda combinar esto con una verificación de origen y referencia:

Esta técnica de defensa se analiza específicamente en la sección 4.3 de Defensas robustas para la falsificación de solicitudes entre sitios. Sin embargo, Mathias Karlsson documentó omisiones de esta defensa usando Flash ya en 2008 y nuevamente en 2015 para explotar una falla CSRF en Vimeo. Sin embargo, creemos que el ataque de Flash no puede falsificar los encabezados Origin o Referer, por lo que, al verificar ambos, creemos que esta combinación de comprobaciones debería evitar los ataques CSRF de derivación de Flash. (NOTA: si alguien puede confirmar o refutar esta creencia, háganoslo saber para que podamos actualizar este artículo)

Sin embargo, por las razones ya discutidas, verificar Origin puede ser complicado.

Actualizar

Escribí una publicación de blog más detallada sobre CORS, CSRF y X-Requested-With aquí.

Asegúrate de leer la respuesta de SilverlightFox. Destaca una razón más importante.

La razón es principalmente que si conoce la fuente de una solicitud, es posible que desee personalizarla un poco.

Por ejemplo, digamos que tiene un sitio web que tiene muchas recetas. Y utiliza un marco jQuery personalizado para deslizar recetas en un contenedor en función de un enlace en el que hacen clic. El enlace puede ser www.example.com/recipe/apple_pie

Ahora normalmente eso devuelve una página completa, encabezado, pie de página, contenido de recetas y anuncios. Pero si alguien está navegando por su sitio web, algunas de esas partes ya están cargadas. Por lo tanto, puede usar un AJAX para obtener la receta que el usuario ha seleccionado, pero para ahorrar tiempo y ancho de banda, no cargue el encabezado/pie de página/anuncios.

Ahora puede simplemente escribir un punto final secundario para los datos como www.example.com/recipe_only/apple_pie pero eso es más difícil de mantener y compartir con otras personas.

Pero es más fácil detectar que se trata de una solicitud ajax que realiza la solicitud y luego devuelve solo una parte de los datos. De esa manera, el usuario desperdicia menos ancho de banda y el sitio parece más receptivo.

Los marcos solo agregan el encabezado porque a algunos les puede resultar útil realizar un seguimiento de qué solicitudes son ajax y cuáles no. Pero depende completamente del desarrollador usar tales técnicas.

En realidad es un poco similar a la Accept-Language encabezamiento. Un navegador puede solicitar un sitio web, por favor muéstrame una versión rusa de este sitio web sin tener que insertar /ru/ o similar en la URL.

Algunos marcos están usando este encabezado para detectar solicitudes xhr, por ejemplo, grails spring security está usando este encabezado para identificar la solicitud xhr y dar una respuesta json o una respuesta html como respuesta.

La mayoría de las bibliotecas Ajax (Prototype, JQuery y Dojo a partir de v2.1) incluyen un encabezado X-Requested-With que indica que la solicitud fue realizada por XMLHttpRequest en lugar de activarse al hacer clic en un hipervínculo normal o en un botón de envío de formulario.

Fuente: http://grails-plugins.github.io/grails-spring-security-core/guide/helperClasses.html

Te mostramos las comentarios y valoraciones de los lectores

No se te olvide dar visibilidad a este artículo si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *