В последнее время я видел это в своем журнале ошибок (1 в день, и у меня 40k посетителей в день):
[22-Sep-2009 21:13:52] PHP Warning: session_start() [function.session-start]: The session id contains illegal characters, valid characters are az, AZ, 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 az, AZ, 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
Это не проблема с конфигурацией, потому что она работает для всех.
Я уже модифицировал php.ini, чтобы иметь следующее:
session.use_only_cookies = 1 session.use_trans_sid = 0
Я подозреваю, что захват сеанса или какая-то атака, о которой я не знаю (я парано;)).
Вы хоть представляете, что это может быть? Что я могу сделать для повышения безопасности и избежать этого?
Что, вероятно, сделано здесь, так это то, что этот клиент изменил содержимое файла cookie PHPSESSID. Обычно SessionID имеет значение «62bf75fb02922cf9c83fb3521255b4ab» (шестнадцатеричный)
Однако пользователь может изменить файл cookie с помощью некоторых инструментов. Это не наносит ущерба вашему веб-сайту и серверу, поскольку эта модификация выполняется на стороне клиента и, таким образом, не влияет на сервер (кроме создания этих ошибок). Что вы можете сделать, так это то, что при получении такой ошибки вы меняете идентификатор сеанса и заменяете тот, который находится на клиенте.
См. Решение:
$ok = @session_start(); if(!$ok){ session_regenerate_id(true); // replace the Session ID session_start(); // restart the session (since previous start failed) }
Помните, что вы не можете заменить или записать файл на сервер через PHP session cookie. Только когда сеанс успешно запущен, PHP пишет файл сеанса о текущем сеансе и сохраняет его в папке tmp. После того как файл станет старым, файл будет удален.
Это, скорее всего, вызвано спам-ботами. Я вижу, что многие спам-боты отправляются идентификатором сеанса в качестве параметра GET, который затем пытается использовать для вставки SMTP или для отправки электронной почты. Я попытаюсь найти доказательства где-нибудь из моих журналов, но я знаю, что это случилось со мной, по крайней мере, на десятках сайтов. Когда я увидел это, GET vars выглядел так ?sid=v14gra@spam.com\n\subject:blah blah blah\n\nspam email here etc...
По наилучшей догадке, у кого-то есть плохой идентификатор сессии в их cookie сессии и вызывает ошибку.
Я не вижу, как кто-то будет использовать недопустимый идентификатор сеанса для захвата сеанса.
Если вы хотите воспроизвести ошибку:
<?php error_reporting(E_ALL); session_start(); session_id ("$");