2010-04-22 18 views
9

tengo un sitio web que utiliza cookies de sesión para mayor seguridad. funciona bien y todo, pero cualquier solicitud de ajax en este momento no es segura. Por ejemplo, digamos que un usuario está en una página. solo pueden acceder a esta página si han iniciado sesión con una sesión, hasta ahora todo bien. pero ahora la petición Ajax que piden esAsegurar una solicitud de Ajax

ajaxpages/somepage.php?somevar=something&anothervar=something 

si cualquier otro usuario decide ir a ese enlace a sí mismos (sin una sesión) todavía consiguen el mismo resultado ajax que estaba destinado a iniciar sesión en las personas.

así que obviamente tendré que pasar los datos de la sesión cuando envíe una solicitud de AJAX. Alguien tiene algún consejo sobre la mejor manera de hacer esto? Nunca he hecho esto antes y preferiría usar métodos confiables que inventar los míos.

Respuesta

5

Las solicitudes de ajax funcionan igual que cualquier otra solicitud a su sitio web y deben devolver las mismas cookies de sesión que la solicitud que no es Ajax. Esto se señala en this question. Si no está recibiendo la cookie de la sesión, quizás algo más esté mal.

+0

necesito ayudar, evite los comentarios duplicados, por favor consulte los comentarios de Rook XD gracias kibbee –

2

Utilice la misma verificación de seguridad en las páginas que manejan la solicitud de AJAX.

2

Dado que se trata de una página de PHP, no veo por qué no podría realizar la autenticación en el lado de PHP. Si la autenticación es exitosa, envíe de vuelta los datos. De lo contrario, envíe de vuelta un mensaje de error. AJAX no son tan diferentes de cualquier otra solicitud.

4

Tener una salida de ajax no es necesariamente una vulnerabilidad. Depende completamente de qué datos se transmiten. No estoy seguro de qué plataforma está utilizando, pero la mayoría de las plataformas de desarrollo de aplicaciones web tienen una variable de sesión que puede mantener el estado entre las solicitudes.

Lo que tiene en su lugar es una forma de marcar al usuario como iniciando sesión desde el lado del servidor. Me PHP este sería el resultado:

if(login($user,$password)){ 
    $_SESSION['logged_in']=true; 
} 

A continuación, se puede comprobar en un archivo de cabecera si se les permite acceder a la página:

if(!$_SESSION['logged_in']){ 
    header("location: http://127.0.0.1/"); 
    die(); 
} 

(Si una variable no está definida también es falsa .)

Hay algunas cosas que debe tener en cuenta. Se trata de una vulnerabilidad:

if(!$_COOKIE['logged_in']){ 
    header("location: http://127.0.0.1/"); 
    die(); 
} 

El usuario puede controlar $ _COOKIE, por lo que se puede decir que se registran en

Otra vulnerabilidad:.

if(!$_COOKIE['logged_in']){ 
    header("location: http://127.0.0.1/"); 
} 

cabecera() no matar el guion De hecho, todavía se ejecuta, por lo que seguirá emitiendo pero no se mostrará en un navegador, aún puede usar netcat/telnet/wireshark para ver los datos.

+0

tengo una pregunta aquí, no creo que sea necesario crear una nueva pregunta de SO. XD usualmente uso exit ;. entonces, en este caso, ¿usar morir mejor o salir mejor? alguna recomendación para mí para leer? sobre la diferencia entre morir y salir. Gracias. y una más, estoy confundido, si solo verificas que el usuario haya iniciado sesión, ¿es esto vulnerable a xss? ya que cualquiera puede engañar al usuario conectado al sitio xss para obtener datos. o estoy totalmente equivocado sobre xss.gracias de nuevo Rook XD –

+0

@Tian Loon no tengo idea de lo que estás preguntando. ¿Por qué habría una diferencia entre morir y salir? ¿O entre eco e impresión? Sí, xss puede usarse para secuestrar una sesión. Mi publicación no tiene nada que ver con xss. – rook

+0

oops. gracias, acabo de encontrar http://stackoverflow.com/a/1795031/805373 explicando el dado y la salida es la misma. Consíguelo. gracias ROok –

Cuestiones relacionadas