2009-09-22 15 views
8

Dernièrement, j'ai vu dans mon journal d'erreurs (1 par jour, et j'ai 40k visiteurs par jour):Détournement de session ou attaque?

[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 

Ce n'est pas un problème de configuration, car il travaille pour tout le monde.

je l'ai déjà modifié php.ini avoir ceci:

session.use_only_cookies = 1 
session.use_trans_sid = 0 

Je soupçonne un détournement d'avion de session ou une sorte d'attaque, je ne suis pas au courant (je suis parano;)).

Avez-vous une idée de ce que ça pourrait être? Que puis-je faire pour améliorer la sécurité et éviter cela?

Répondre

18

Ce qui est probablement fait ici est que ce client a changé le contenu du cookie PHPSESSID. Normalement, le SessionID est quelque chose comme "62bf75fb02922cf9c83fb3521255b4ab" (hexadécimal)

Cependant, l'utilisateur peut avoir modifié le cookie en utilisant certains outils. Cela ne cause aucun dommage à votre site Web et à votre serveur, car cette modification est effectuée côté client et, ce faisant, n'affecte pas le serveur (sauf la génération de ces erreurs). Ce que vous pouvez faire est que lorsque vous recevez une telle erreur, vous modifiez l'ID de session et remplacez celui qui se trouve sur le client.

Voir solution:

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

Rappelez-vous, vous ne pouvez pas remplacer ou écrire un fichier sur le serveur via cookie de session PHP. C'est seulement quand une session est démarrée avec succès, PHP écrit un fichier de session sur la session en cours et le stocke dans le dossier tmp. Une fois le fichier ancien, le fichier est supprimé.

+0

Parfait !!!! Merci beaucoup!!! :) – Toto

+0

pas de problème du tout =) – mauris

1

La meilleure estimation est que quelqu'un a un identifiant de session incorrect dans son cookie de session et provoque l'erreur.

Je ne vois pas comment quelqu'un pourrait utiliser un identifiant de session invalide pour le détournement de session.

Si vous voulez reproduire l'erreur:

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

La personne essaie-t-elle d'écrire quelque chose/de remplacer un fichier sur le serveur? – Toto

+1

non ne vous inquiétez pas – mauris

+0

merci Mauris. :) – Toto

3

Ceci est probablement causé par des spambots. Je vois beaucoup de spambots qui reçoivent un ID de session en tant que paramètre GET, qu'ils essaient ensuite d'utiliser pour l'injection SMTP ou pour envoyer des emails. Je vais essayer de trouver des preuves quelque part dans mes journaux, mais je sais que cela m'est arrivé sur au moins une douzaine de sites. Quand je l'ai vu, les VAR ressemblaient à: [email protected]\n\subject:blah blah blah\n\nspam email here etc...