Какой уровень конфиденциальной информации я могу сохранить в переменной $ _SESSION? - PullRequest
4 голосов
/ 25 июня 2011

Давайте подумаем, у вас есть приложение для покупок с возможностью оплаты кредитной картой.Пользователь входит в систему и начинает делать покупки.Можно ли получить номер своей кредитной карты и пароль из базы данных и сохранить их в переменной сеанса, как только пользователь войдет в систему, чтобы исключить необходимость будущих запросов SQL на следующих этапах, через которые пользователь собирается завершить свой платеж?

Опишите, пожалуйста, когда:
a) Соединение не защищено
b) Соединение установлено под защитой SSL

Пример кредитной карты, приведенный выше.Я хочу получить представление о безопасности переменных сеанса.

Ответы [ 2 ]

4 голосов
/ 25 июня 2011

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

Сеансовый cookie - это просто случайная строка, сгенерированная PHP, и ее можно просмотреть в виде обычного текста (если вы не используете SSL) для любого «человека посередине», что делает возможным захват другогочеловеческая сессия.

Хранение любых конфиденциальных данных является потенциальной проблемой безопасности, поэтому для обработки информации о кредитных картах сегодня вам необходим сертифицированный PCI-DSS хостинг и среда.Это применимо даже в том случае, если вы никогда не «храните» его на своем сервере, если поток информации, проходящий через ваше оборудование, должен соответствовать требованиям PCI-DSS.

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

2 голосов
/ 25 июня 2011

Как говорит Дагон, все данные сеанса обычно находятся на сервере .

Однако есть еще несколько подводных камней. Во-первых, во многих конфигурациях переменные сеанса хранятся в /tmp/ и принадлежат владельцу процесса веб-сервера. В ситуации с общим хостингом возможно, что другие пользователи на общем хосте могут получить доступ к данным сеанса. Во-вторых, вы можете настроить свой собственный обработчик сеанса, например, хранить данные сеанса в базе данных. В этом случае все проблемы безопасности этой реализации также должны быть приняты во внимание.

Лучше не хранить данные кредитной карты в данных сеанса; просто запишите его в безопасное место и извлеките его с помощью какого-нибудь разумного механизма (например, поиск в базе данных), когда это действительно необходимо.

...