2009-09-22 7 views
8

últimamente he visto esto en mi registro de errores (1 por día, y tengo 40k visitantes por día):¿Secuestro o ataque de sesión?

[22-Sep-2009 21:13:52] PHP Warning: session_start() [function.session-start]: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /var/my_files/class.session.php on line 67 
[22-Sep-2009 21:13:52] PHP Warning: Unknown: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in Unknown on line 0 
[22-Sep-2009 21:13:52] PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct() in Unknown on line 0 

Esta no es una cuestión de configuración, ya que está trabajando para todo el mundo.

ya he modificado php.ini tener esto:

session.use_only_cookies = 1 
session.use_trans_sid = 0 

sospecho que un secuestro de sesión o un tipo de ataque que no estoy al tanto de (soy Parano;)).

¿Tiene alguna idea de lo que podría ser? ¿Qué puedo hacer para mejorar la seguridad y evitar esto?

Respuesta

18

Probablemente lo que hace aquí es que este cliente ha cambiado el contenido de la cookie PHPSESSID. Normalmente, el SessionID es algo así como "62bf75fb02922cf9c83fb3521255b4ab" (hexadecimal)

Sin embargo, el usuario puede haber modificado la cookie con algunas herramientas. Esto no causa ningún daño a su sitio web y servidor porque esta modificación se realiza en el lado del cliente y al hacerlo no afecta el servidor (excepto la generación de esos errores). Lo que puede hacer es que cuando reciba dicho error, cambie la ID de sesión y reemplace la que está en el cliente.

Ver solución:

$ok = @session_start(); 
if(!$ok){ 
    session_regenerate_id(true); // replace the Session ID 
    session_start(); // restart the session (since previous start failed) 
} 

Recuerde, usted no puede reemplazar o escribir un archivo en el servidor a través de PHP cookie de sesión. Solo cuando una sesión se inicia correctamente, PHP escribe un archivo de sesión sobre la sesión actual y lo almacena en la carpeta tmp. Una vez que el archivo se vuelve viejo, el archivo se elimina.

+0

Perfecto !!!! ¡¡¡Muchas gracias!!! :) – Toto

+0

no hay problema en absoluto =) – mauris

1

Supongo que alguien tiene una identificación de sesión incorrecta en su cookie de sesión y está causando el error.

No veo cómo alguien usaría un ID de sesión no válido para el secuestro de la sesión.

Si desea reproducir el error:

<?php 
error_reporting(E_ALL); 
session_start(); 
session_id ("$"); 
+0

¿Está la persona tratando de escribir algo/reemplazar un archivo en el servidor? – Toto

+1

no, no se preocupe – mauris

+0

gracias Mauris. :) – Toto

3

Esto es probablemente causado por spambots. Veo que a muchos spambots se les envía una ID de sesión como un parámetro GET, que luego intentan usar para la inyección SMTP o para enviar correos electrónicos. Trataré de encontrar pruebas en alguna parte de mis registros, pero sé que me ha sucedido en al menos una docena de sitios. Cuando lo vi, los vars GET parecieron: [email protected]\n\subject:blah blah blah\n\nspam email here etc...

Cuestiones relacionadas