Как Вы надежно передаете данные кредитной карты между страницами в PHP? Я создаю приложение электронной коммерции, и я хотел бы иметь пользователей для прохождения через контроля как это:
Введите информацию->, Обзор-> Завершает Порядок
Проблема состоит в том, что я не уверен в том, как безопасно передать кредитную информацию от того, когда вводы данных пользователем их к тому, когда я обрабатываю ее (на Завершить шаге Порядка). Я слышал, что сессии использования небезопасны, даже с шифрованием.
Любая справка ценилась бы!
Не моя область знаний, но я думаю, что вы хотите сохранить его в сеансе, но также использовать «токен синхронизации» (или как его сейчас называют дети), чтобы избежать атак CSRF.
Конечно, вы хотите использовать https (правильно), избегая конфиденциальных данных в URL и скрытых полях, избегая размещения очень конфиденциальной информации в любом ответе и т. Д. И т. Д.
Не храните информацию о кредитной карте в сеансе, не храните ее в базе данных, не сохраняйте в файле. Вместо этого напишите информацию cc обратно на страницу обзора в скрытых входах html.
Таким образом, программа будет работать следующим образом:
Этот метод имеет два преимущества:
Этот последний момент вызывает еще одно беспокойство - имея страницу обзора, вы удваиваете количество раз, когда зашифрованные данные кредитной карты передаются по сети.Для этого метода требуется минимум 4 передачи: от клиента к серверу, от сервера к клиенту, от клиента к серверу (снова), затем с сервера на шлюз. Без проверки есть минимум 2 передачи: от клиента к серверу и от сервера к шлюзу. Стоит ли удобство страницы обзора риска дополнительных передач? Это решение вы, как веб-разработчик (и ваш клиент), должны принять.
Я бы не стал его нигде хранить. Это слишком рискованно и, вероятно, неэтично.
Отправьте запрос на платежный шлюз, разместив форму по https, и сохраните только результат транзакции.
Вас, вероятно, волнует только то, была ли транзакция одобрена или отклонена. Кого волнует, что это за номер?
Ну, во-первых, вы должны использовать протокол HTTPS, чтобы убедиться, что соединение зашифровано.
После этого вы можете хранить данные в суперглобальном $_SESSION
. Данные хранятся на ваших серверах, поэтому они относительно безопасны.
Вы можете использовать аналогичную технику, вставляя информацию в базу данных Order, где ключом является GUID или что-то еще достаточно случайное и уникальное. Затем, когда человек переходит к изменению/просмотру своего заказа, вы должны сохранить ID заказа в GET-части URL (или, если вы параноик, в cookie/переменной сессии):
https://example.com/order?orderID=akjgflkhaslasdfkjhalsdjkljahs
Для обеспечения дополнительной безопасности вы также можете хранить IP-адрес в таблице заказов и убедиться, что IP и ID заказа совпадают.
Я думаю, что я придется согласиться. Хранение номеров кредитных карт - слишком большой риск, а последствия могут быть надуманными.
Идеальным способом было бы передать информацию стороннему процессору и просто использовать полученный результат для формирования логики сценария.
if (transaction){
// code goes here
}
else{
// code goes here
}
Надеюсь, вы уловили ... :)
Альтернативой является использование службы профиля оплаты, такой как Диспетчер информации о клиентах Authorize.net (есть и другие). Вы сохраняете информацию о платеже в профиле через их API, а затем используете идентификатор профиля при фактическом списании средств с карты. Таким образом, вы никогда не сохраните данные на своих серверах.