PHP защита от фиксации сессии / угона - PullRequest
3 голосов
/ 27 января 2012

Я поддерживаю сайт магазина с низким трафиком, который хранит номера кредитных карт в базе данных. Это не правильно (или даже законно, я верю), поэтому я меняю способ хранения чисел.

При структурировании сайта страница информации о кредитных картах отправляется на себя, проверяет данные, сохраняет данные в БД, а затем перенаправляет пользователя на страницу подтверждения cc, где проверяется cc и размещается заказ. После этого они снова перенаправляются на страницу завершения заказа. В любом случае, чтобы получить номер cc со страницы cc info на странице подтверждения, я думал об использовании сеанса, но я беспокоюсь об уязвимостях и пытаюсь разобраться с ними (я читаю эту ссылку. и это ). Я могу сохранить номер копии в сеансе, получить его на следующей странице, использовать его и unset(), и он исчезнет в течение нескольких секунд (также обратите внимание, что эти страницы используют SSL). Что-то вроде:

Копия информационной страницы:

session_start();
$_SESSION['card_number'] = $_POST['cardnumber']; //please tell me if there are vulnerabilities here setting directly from $_POST
...
header(sprintf("Location: %s", $insertGoTo));

Страница подтверждения cc:

session_start();
//retrieve $_SESSION['card_number']
unset($_SESSION['card_number']);

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

Учитывая, что я использую session.use_trans_sid = 0 и session.use_only_cookies = 1 (где идентификаторы сеанса обрабатываются только с помощью файлов cookie, а не URL-адресов (не уверен, зачем мне нужны оба)), и учитывая мое использование этой конкретной переменной сеанса, уязвим ли этот код для фиксация сеанса? Было бы полезно восстановить идентификатор сеанса (после или до?) Я установил cc # в session в этом случае? Я предполагаю, что да, и, поскольку протокол к этому моменту является SSL, я также предполагаю, что после регенерации session я буду защищен настолько, насколько SSL получит меня?

Итак, мой главный вопрос заключается в том, чтобы, следуя этим инструкциям на моем сайте, опытному злоумышленнику было бы достаточно сложно зафиксировать / угнать сеанс, чтобы получить cc # пользователя за количество времени, в течение которого он существует (примерно 3-15 секунд) ? Если нет, то как, если возможно, я могу получить это к этому моменту?

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Даже если сеанс был захвачен, человек может получить номер CC только в том случае, если ваш сценарий позволяет пользователю увидеть номер CC, или на вашем сайте есть дамп сеанса.

Также имейте в виду, что хранение номеров CC в базе данных в виде открытого текста может быть незаконным. Если вас беспокоит кража данных, обязательно закодируйте или зашифруйте все конфиденциальные данные.

Удачи!

0 голосов
/ 27 января 2012

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

Что вам нужно сделать, это взять всю информацию и передать ее непосредственно процессору кредитной карты, например Authorize.Net, или воспользоваться услугой, позволяющей пользователю произвести оплату в домене, размещенном службой, а затем вернуть ее вам с помощью код авторизации, чтобы вы знали, что они заплатили (у PayPal есть такая услуга, я знаю, что они не лучшие, но есть и другие)

Для получения информации вообще требуется, чтобы вы имели хоть какой-то уровень соответствия PCI. Хранение информации о карте вообще требует гораздо более высокого уровня.

Есть множество вещей о PCI. Вот вики на нем: http://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard

...