2010-02-21 17 views
5

Hemos creado un sitio web impulsado por una base de datos utilizando PHP con cookies establecidas y ahora necesitamos evitar el spoofing HTTP, ¿alguna idea sobre cómo hacer esto? somos principiantes con esto por lo que cualquier ayuda sería muy útil¿Cómo prevenir el spoofing HTTP?

+1

¿cuál es la URL? –

+0

se está cargando una vez que hemos completado los problemas de seguridad – Jermain

Respuesta

6

No se pueden "falsificar" las solicitudes HTTP. Envía una solicitud al servidor y el servidor responde de manera adecuada.

Creo que lo que intenta evitar es la suplantación de cookies. Teniendo en cuenta que las cookies se almacenan en el lado del cliente, no hay nada que pueda hacer para evitar que los usuarios modifiquen sus contenidos.

No almacene información confidencial en sus cookies. No son seguros y el cliente los lee y modifica fácilmente.

Use las sesiones de PHP en su lugar. La explicación completa sobre cómo funcionan las sesiones y cómo mantenerlas seguras se puede leer en one of my previous answers.

Esencialmente, asegurando sesiones se realiza en dos frentes:

  • Prevención de fijación de sesión
    Regenerar una nueva session_id cada X número de solicitudes con el fin de reducir la cantidad de tiempo que un atacante tiene que robar La identificación.

  • identificar de forma única el cliente
    Uso del IP y/o el agente de usuario para identificar el cliente y comprobar que el valor de cada carga de página contra los que están almacenados en la sesión. Esta es realmente la única opción que tiene para identificar al cliente de manera única.

Incluso con que, en su lugar, no hay solución a toda prueba y una vez que su session_id se ve comprometida, que son más o menos acabado.

De nuevo, para una explicación detallada, por favor vea my previous answer.

+0

bien gracias, parece útil – Jermain

+0

@Jermain: luego puede hacer que la respuesta sea su respuesta aceptada haciendo clic en la marca de verificación a la izquierda de mi respuesta. –

+0

aún no estoy registrado, pero una vez registrado lo haré – Jermain

2

Spoofing de qué? HTTP es solo un protocolo para transferir datos, en realidad no es algo que se pueda falsificar.

Lo que hay que hacer no es evitar la falsificación de información, sino simplemente no confiar nunca en el cliente. En términos de cookies, almacene un valor pseudoaleatorio hash que compare con la base de datos antes de aceptar los datos de la cookie.

ACTUALIZADO:

dado que es específicamente las cookies que usted está preocupado, voy a ir un poco más en profundidad. Hay dos cosas principales de las cuales preocuparse cuando almacena cookies.

  1. No almacene los datos reales
  2. Validar contra la base de datos

Así que digamos que usted quiere tener un sitio con los usuarios donde se almacenan los datos personales. En la cookie, puede almacenar el nombre de usuario o ID de usuario y un token de seguridad hash que también se almacena en la base de datos cuando el usuario inicia sesión. El token de seguridad no se conocerá y cambiará con cada inicio de sesión. Cualquier información personal permanece en la base de datos, nunca en la cookie.

leer un poco más sobre las mejores prácticas: http://jaspan.com/improved_persistent_login_cookie_best_practice

+0

tenemos que detectar intentos de falsificación de mensajes HTTP si eso ayuda? – Jermain

+0

Quizás podría describir un ejemplo específico de lo que cree que podría suceder. –

+0

Si alguien descubre la cookie que PHP usa para administrar una sesión, ¿qué significa detener a alguien en una máquina diferente configurando manualmente la cookie con el mismo valor y haciéndose pasar por usted? – Jermain

2

Si desea evitar que man-in-the-middle espionaje, es posible que desee utilizar HTTPS, que crea un canal seguro a través de la red, a condición de que los conjuntos de cifrado adecuados se usan y que el certificado del servidor es verified and trusted.

Nota: La pregunta original era ambigua. Ahora está claro que la pregunta es sobre la suplantación de cookies.

+1

La pregunta no tiene sentido, por lo que esta respuesta ofrece buenos consejos para * una * interpretación de la misma. – deceze

+0

Sí, bien, mencioné que era un novato, así que tenlo en cuenta, tengo que empezar en algún lugar – Jermain

+0

Tienes razón, por lo tanto, eliminé mi -1. –

0

Spoofing? El único problema real con una identidad comprometida es el robo de cookies.

Lo que podría hacer es, siempre que se envíe una cookie a través de los encabezados HTTP, verificar esto con la dirección IP a la que se emitió. Por ejemplo:

<?php 
session_start(); 
$rec = db_query('select count(*), ip from session where session_id = "' . session_id() . '"'); 

list ($last_count, $last_ip) = $rec[0]; 

if (! $last_count) { 
    # add it into the database 
    db_query('insert into session (session_id, ip) values (' . 
     '"' . session_id() . '", ' . 
     '"' . $_SERVER['REMOTE_ADDR'] . '"' . 
    ')'); 
} else { 
    if ($last_ip != $_SERVER['REMOTE_ADDR']) { 
     print "user has stolen a cookie!"; 
    } 
} 
?> 

Pero esto puede tener un efecto negativo en las personas cuyo ISP les emite una dirección IP dinámica.

+0

, no estoy seguro de cuán útil es este "consejo". Esto no solo atrapa aquellos con una dirección IP dinámica sino también aquellos que usan un dispositivo móvil como una computadora portátil. Pasar de una oficina a otra puede ser suficiente para que el código los identifique como cookies. No recomiendo este. – T9b

0

Sé que esto ha sido respondido, pero quiero agregar otra técnica que utilizo, es particularmente útil para los inicios de sesión de administración. Use sesiones como de costumbre pero agregue protección de directorio a la mezcla.

De esta forma, si una sesión es secuestrada, el secuestrador también debe poder obtener el inicio de sesión en el directorio.

Utilizo esta técnica para la administración del foro. ciertos foros se piratean fácilmente y esto reduce la posibilidad de que un hacker entre y cause problemas graves.

DC

Cuestiones relacionadas