2010-05-26 5 views
0

Я делаю простую корзину для небольшого сайта.Предотвратите захват PHP sesison, эти хорошие идеи?

Я планирую хранить элементы корзины, а также регистрироваться в user_id в переменных сеанса.

, чтобы сделать вещи немного более безопасным, я думал, что это сделать:

  1. sha1() для user_id перед сохранением его в сессии.

  2. Также sha1() и сохраните http_user_agent var с некоторой солью и проверьте это вместе с user_id.

Я знаю, что можно сделать больше, но я думал, что это по крайней мере помогает совсем немного? и мне легко реализовать.

ответ

3

Я думаю, вы неверно истолковали, что означает захват сеанса. Ваша первая идея, похоже, не предотвращает захват сеанса.

Когда вы совершаете захват, вы крадете чей-то идентификатор сеанса и притворяетесь его идентификатором сеанса. Пользователь не может изменять какие-либо фактические данные сеанса, поэтому на самом деле не имеет значения, шифруете ли вы что-либо, поскольку они не смогут получить к нему доступ.

Что вы можете сделать, это сохранить в сеансе строку IP и User Agent и проверить ее перед объявлением пользователя, зарегистрированного на каждой загрузке страницы. Если IP-адрес и агент пользователя не совпадают, скорее всего, вы должны попросить их войти в систему. (Ну, по крайней мере, убедитесь, что пользовательский агент тот же)

+0

Право, да, спасибо, что указали это !. Я подумал, что, возможно, угонщик мог бы подделать сессию и угадать user_ids. Таким образом, хранение ip и агента пользователя, угонщик все еще может украсть эти данные, но они должны были бы подделать свой IP-адрес и собственный пользовательский агент для соответствия? – matthew

+0

Пользователь не может напрямую получить доступ или изменить что-либо в $ _SESSION. Единственное, что они могли бы украсть, это PHPSESSID. Нет смысла затуманивать что-либо в данных сеанса IN, потому что доступ к нему имеет только сервер. –

+2

Держитесь подальше от требования соответствия IP-адреса. Многие люди там имеют интернет-провайдеров, которые меняют свои IP-адреса несколько раз в течение десяти минут. Я не люблю тебя. – webbiedave

1

Я думал, что это по крайней мере помогает правильно?

Не совсем. Хеширование user_id ничего не делает, поскольку user_id уже предположительно является частью вашей сессии.

Хеширование IP или UA и требование его соответствия - это слабая форма проверки, которая также может вызвать серьезные трудности с доступом. Прокси-пользователи могут получать разные адреса каждый раз; пользователи могут иметь динамический IP-адрес, который изменяется регулярно; один IP может представлять множество фактических клиентов. В целом, это вызовет больше проблем, чем решает.

В любом случае это ничего не делает против атак XSRF, где IP и UA будут полностью совпадать. См. this question для обсуждения стратегий анти-XSRF.

1

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

В качестве примера человек X заполняет форму для входа на twitter.com. Twitter.com отправляет человеку X куки. Лицо Y, просматривает пакет и вручную вставляет этот файл cookie в свой браузер и посещает twitter.com, чтобы узнать, что они вошли в систему. Это захват сеанса.

Тогда есть фиксация сеанса, где я даю вам ссылку http://www.blah.com/?phpsessid=1234, а затем молюсь, чтобы вы туда и заходили, не замечая PHPsessid в URL-адресе. Если вы это сделаете, и если сайт не восстановит идентификатор сеанса (как всегда, при изменении состояния разрешения), тогда злоумышленник теперь может посетить blah.com/?phpsessid=1234, и они войдут в систему как вы. Таким образом, им не нужно было отслеживать идентификатор сеанса, потому что это были те, кто дал его вам.

Вот отличный сайт с информацией о предотвращении основного уголка PHP-сессии, который, я считаю, может быть учебником для ваших исследований.

http://phpsec.org/projects/guide/4.html

+0

phpsec.org, где я получил идею использования хранения и проверки user_agent. Возможно, я просто это сделаю. Его легко реализовать и лучше, чем ничего. – matthew