Проблема с сессиями PHP - PullRequest
       11

Проблема с сессиями PHP

2 голосов
/ 06 января 2010

У меня одна адская проблема, которую я не могу понять для своей жизни. Я создал очень простую CMS для клиента. Каждая отдельная страница CMS имеет и включает файл с именем session.php.

session_start(); 
$username = $_SESSION['siteadmin'];
if (!$_SESSION['siteadmin']){
    header( 'Location: login.php?status=2' );
}  

Время от времени случайные вещи исчезают из базы данных. Итак, я настроил грубую систему регистрации, которая регистрировала любые действия через CMS. Ну, это случилось снова. Логи показывают это:

Logged in                           **.**.237.209   17:18  <-- thats me
Deleted board member id 12  195.42.102.25   16:49 
Deleted board member id 15  195.42.102.25   16:49 
Deleted board member id 8   195.42.102.25   16:49 
Deleted board member id 10  195.42.102.25   16:49 
Deleted board member id 9   195.42.102.25   16:49 
Deleted board member id 4   195.42.102.25   16:49 
Deleted board member id 3   195.42.102.25   16:49 
Deleted board member id 5   195.42.102.25   16:49 
Deleted board member id 6   195.42.102.25   16:49 
Deleted board member id 11  195.42.102.25   16:49 
Deleted board member id 7   195.42.102.25   16:49 
Deleted review id 2             195.42.102.25   16:49 
Deleted review id 3             195.42.102.25   16:49

и это продолжается для пары страниц. Это даже не показывает 195.42.102.25 вход в систему! В прошлый раз это случилось с 195.128.18.19. Как компьютеры загружают окно без переменной сеанса? Есть ли в моем коде дыра в безопасности, которую я полностью пропускаю?!

Любое понимание этого вопроса было бы замечательно.

Спасибо

Ответы [ 3 ]

8 голосов
/ 06 января 2010

поставить exit после header.

3 голосов
/ 06 января 2010

Действительно, поставьте выход или кубик после заголовка.

Довольно просто не следовать перенаправлению заголовка и получить то, что выполняется в противном случае.

По этому вопросу есть забавная запись The Daily WTF (и более полная), которую я пока не могу найти.

Редактировать: Найдено! :) http://thedailywtf.com/Articles/WellIntentioned-Destruction.aspx

0 голосов
/ 06 января 2010

Рассмотрите возможность добавления session_regenerate_id() после session_start. Это предотвратит кражу файлов cookie сеанса (PHPSESSID в идентификаторе ваших файлов cookie восстанавливается при каждой загрузке страницы, если вы используете вышеуказанную функцию), что, вероятно, и происходит (за исключением проблемы exit в ответе выше)

...