2011-02-08 10 views
5

He leído que verificar el encabezado X-Requerido-Con de la solicitud ajax es una buena forma de asegurarse de que la solicitud no provenga del exterior. En el lado del servidor, ¿cómo puedo verificar este encabezado? y ¿cuál es la forma correcta de reaccionar de este encabezado faltante o incorrecto (redirigir, lanzar excepción, else)?Cómo el servidor puede verificar las solicitudes ajax no desde el sitio, X-Requerido-Con

+4

Es posible que desee ver en http://stackoverflow.com/questions/623299/can-the-x-requested-with-http-header-be-spoofed; muestra que 'X-Requested-With' puede ser falso. –

+0

quieres ver esto también http://www.yiiframework.com/forum/index.php?/topic/4945-yiiapp-request-isajaxrequest/ –

Respuesta

8

se puede comprobar como este ...

$isAjax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND 
      strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest'; 

Si usted es solamente acceso a través esperando XHR, a continuación, sólo exit si esta cabecera no está presente.

Nota: Este encabezado es trivial para suplantar. No confíe en esto para nada más que parece que vino de na XHR.

+0

Quiero usarlo para asegurarme de que la solicitud no llegue de alguien que miró mi código js, ​​tomó las URL y está enviando comentarios desde fuera de mi sitio. Entonces, si se puede fingir, ¿entonces no hay forma de protegerse de esto? – zmol

+0

@zmol Lo siento, no hay forma de hacerlo simplemente buscando la presencia de ese encabezado. – alex

+0

, pero ¿hay otras formas? No tiene que ser a través de este encabezado. El objetivo final es asegurarse de que la solicitud no provenga de alguien que lea el código js, ​​lea la línea url de ajax y esté reproduciendo la url desde afuera :) – zmol

6

La única forma segura de garantizar que la solicitud provenga de su sitio y no de otra persona es emitir un token único para el usuario y almacenarlo en su sesión. En el código en el que realiza la solicitud AJAX, debe pasar este token y si coincide con el de su sesión, entonces puede estar seguro de que la solicitud proviene de su sitio.

Más información: http://en.wikipedia.org/wiki/Cross-site_request_forgery

Cuestiones relacionadas