Как надежно передать данные кредитной карты между страницами в PHP

Как Вы надежно передаете данные кредитной карты между страницами в PHP? Я создаю приложение электронной коммерции, и я хотел бы иметь пользователей для прохождения через контроля как это:

Введите информацию->, Обзор-> Завершает Порядок

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

Любая справка ценилась бы!

7
задан Alex 28 March 2010 в 03:05
поделиться

6 ответов

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

Конечно, вы хотите использовать https (правильно), избегая конфиденциальных данных в URL и скрытых полях, избегая размещения очень конфиденциальной информации в любом ответе и т. Д. И т. Д.

0
ответ дан 6 December 2019 в 09:18
поделиться

Не храните информацию о кредитной карте в сеансе, не храните ее в базе данных, не сохраняйте в файле. Вместо этого напишите информацию cc обратно на страницу обзора в скрытых входах html.

Таким образом, программа будет работать следующим образом:

  1. Пользователь отправляет информацию о платеже и выставлении счетов на сервер через HTML-форму.
  2. Сервер проверяет, что эта информация имеет правильный формат (т. Е. Кредитная карта имеет соответствующее количество цифр, был введен платежный адрес и т. Д.)
  3. После проверки сервер записывает обратно всю информацию, представленную в скрытой форме. поля ввода. Это включает в себя платежный адрес, адрес доставки и информацию о кредитной карте.
  4. В форме на странице обзора (со скрытыми полями ввода) есть кнопка с надписью «Завершить заказ» / «Завершить заказ». Эта форма проверки отправляется в скрипт финального заказа.
  5. Сценарий finalize сохраняет информацию о выставлении счетов / доставке в вашей базе данных и отправляет информацию о кредитной карте на ваш платежный шлюз.

Этот метод имеет два преимущества:

  1. Вы экономите накладные расходы и затраты на дополнительное соответствие PCI, которое требуется при хранении кредитной информации.
  2. Этот метод остается в пределах безопасности протокола SSL. Это означает, что зашифрованная информация о кредитной карте должна быть отправлена ​​на ваш сервер в любом случае - этот метод по-прежнему полагается исключительно на эффективность SSL, не привнося сложностей с сохранением данных кредитной карты.

Этот последний момент вызывает еще одно беспокойство - имея страницу обзора, вы удваиваете количество раз, когда зашифрованные данные кредитной карты передаются по сети.Для этого метода требуется минимум 4 передачи: от клиента к серверу, от сервера к клиенту, от клиента к серверу (снова), затем с сервера на шлюз. Без проверки есть минимум 2 передачи: от клиента к серверу и от сервера к шлюзу. Стоит ли удобство страницы обзора риска дополнительных передач? Это решение вы, как веб-разработчик (и ваш клиент), должны принять.

8
ответ дан 6 December 2019 в 09:18
поделиться

Я бы не стал его нигде хранить. Это слишком рискованно и, вероятно, неэтично.

Отправьте запрос на платежный шлюз, разместив форму по https, и сохраните только результат транзакции.

Вас, вероятно, волнует только то, была ли транзакция одобрена или отклонена. Кого волнует, что это за номер?

10
ответ дан 6 December 2019 в 09:18
поделиться

Ну, во-первых, вы должны использовать протокол HTTPS, чтобы убедиться, что соединение зашифровано.

После этого вы можете хранить данные в суперглобальном $_SESSION. Данные хранятся на ваших серверах, поэтому они относительно безопасны.

Вы можете использовать аналогичную технику, вставляя информацию в базу данных Order, где ключом является GUID или что-то еще достаточно случайное и уникальное. Затем, когда человек переходит к изменению/просмотру своего заказа, вы должны сохранить ID заказа в GET-части URL (или, если вы параноик, в cookie/переменной сессии):

 https://example.com/order?orderID=akjgflkhaslasdfkjhalsdjkljahs

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

1
ответ дан 6 December 2019 в 09:18
поделиться

Я думаю, что я придется согласиться. Хранение номеров кредитных карт - слишком большой риск, а последствия могут быть надуманными.

Идеальным способом было бы передать информацию стороннему процессору и просто использовать полученный результат для формирования логики сценария.

if (transaction){
     // code goes here
}
else{
     // code goes here
}

Надеюсь, вы уловили ... :)

0
ответ дан 6 December 2019 в 09:18
поделиться

Альтернативой является использование службы профиля оплаты, такой как Диспетчер информации о клиентах Authorize.net (есть и другие). Вы сохраняете информацию о платеже в профиле через их API, а затем используете идентификатор профиля при фактическом списании средств с карты. Таким образом, вы никогда не сохраните данные на своих серверах.

1
ответ дан 6 December 2019 в 09:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: