2010-07-11 5 views
30

Итак, все говорят, что на сеансах есть риски для безопасности, я хочу знать, какие это риски? Что могут делать хакеры с сеансами?Каковы риски сеансов PHP?

Это не значит знать, как избежать атак, я хочу знать, как это делают хакеры, и что они делают.

Я говорю о PHP SESSIONS.

ответ

0

PHP Сессии использовать идентификаторы сеансов и haxxors могут попробовать все возможные идентификаторы с небольшим изменением они получили правильный один. Кроме того, эти идентификаторы хранятся в файлах cookie и могут быть перехвачены. Третья возможность заключается в том, что PHP может быть ошибкой и создавать два сеанса с одинаковым идентификатором. Кроме того, данные сеанса хранятся в файлах на диске, который не является защищенным. Вместо этого базам данных нужен пароль.

На самом деле невозможно предотвратить первые две причины, но третьи и четвертые могут быть. Например, сохраните данные сеанса в базе данных.

+0

Идентификаторы сеанса имеют длину 128 бит. Это достаточно большой, чтобы вы не могли использовать все возможные идентификаторы до того, как солнце выгорит. – cHao

+0

haha ​​lol @cHao xD – Adam

+0

@cHao - Я бы не стал рассчитывать на это, но он по-прежнему остается долгосрочной оценкой. – Christian

1

Наибольший риск состоит в том, что IP-адреса не связаны с сеансом, а идентификаторы сеансов принимаются без проверки того, что они исходят от IP-адреса, который их запускал (или, по крайней мере, IP-адрес в той же подсети). Это позволяет кому-то отправить ссылку на уже запущенный сеанс, где может возникнуть необходимость войти в невольный обман. После этого SESSION считается зарегистрированным - и хакер, который отправил ссылку (у кого уже есть идентификатор сеанса) имеет доступ к нашему счету rube. Или это может произойти наоборот, когда пользователь уже зарегистрировался и не имеет файлов cookie, поэтому значение PHPSESSID сохраняется в каждой ссылке. Если пользователь вставляет ссылку кому-то, они также эффективно вставляют свой доступ к сайту.

Чтобы предотвратить это, достойный сайт избежит запуска сеанса, пока в нем не будет чего-то, чтобы сохранить его, и отслеживайте, на какой IP-адрес был предназначен сеанс. И для его использования злоумышленник будет искать сайт, который отправляет значение строки запроса PHPSESSID в каждой ссылке с домашней страницы или отправляет аналогично названный файл cookie на индексной странице.

+0

Объединив IP-адрес и идентификатор сеанса, вы можете столкнуться со многими проблемами, особенно с пользователями AOL. –

+0

@ Киран Аллен: И не объединяя их в какой-то степени, вы позволяете двум людям с разных сторон планеты делиться одной и той же сессией, по крайней мере один из них невольно. Будучи доступным для всех, в этом случае, это * плохое. Конечно, вы могли бы немного ограничить ограничение, чтобы быть из одной и той же подсети (блок адресов), как я уже упоминал, но если пользователь AOL может появиться из десятка различных частей сети в одно и то же время, тогда да , Пользователи AOL будут еще более завинчены, чем они есть. – cHao

+0

Это компромисс. Если вы ограничите все, чтобы быть в безопасности, всегда будет какой-то идиот в 30-летнем браузере с взломом, использующем шифрование ROT13 и выходящем из AOL, который жалуется, что не может использовать ваш сайт. Вы должны выбрать, как далеко вы пойдете, чтобы привлечь посетителей, и стоит ли его сайт легче взломать. Для некоторых сайтов безопасность не стоит хлопот .... для других, это так. – cHao

4

Ответ sAc очень хороший. Однако из-за этого не исключайте «сеансы».

Я успешно развернул пользовательские сессии, которые, среди прочего, исправляют захват, разворот пароля (md5/rainbow) и (если используется правильно) фиксацию сеанса.

«успешно развернуто» Я имею в виду прохождение тестирования проникновения и (конечно) на самом деле лучше, чем традиционный.

Нет «секретной» или неясной безопасности; в основном, он генерирует случайный (и уникальный по базе данных) номер (фактически, ориентир в моем случае) на учетную запись пользователя и сохраняет имя guid + как обычный метод (вместо имени пользователя + хэшированный/соленый пароль). Затем он связывает это руководство с IP-адресом пользователя. Не безошибочно, но использование guid и per-ip уже является улучшением по сравнению с текущей системой сеансов. Конечно, есть недостатки, которые открываются после определенного таргетинга (например, ip spoofing + hijacked guid и имя пользователя). Но в целом, это лучший вариант.