Ввод информации о кредитной карте онлайн без обработки - как лучше это сделать? - PullRequest
5 голосов
/ 18 июля 2009

У меня было несколько запросов от клиентов, желающих вывести номер кредитной карты клиента онлайн, а затем обработать платеж в магазине в POS-терминале. Мне интересно, как лучше всего это сделать.

Я не хочу хранить номер кредитной карты на сервере в виде простого текста и не хочу отправлять электронное письмо с номером в виде простого текста.

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

Какие еще есть варианты?

Я буду использовать PHP. Я также в Канаде, если правила влияют на то, какой метод мне следует использовать.

Ответы [ 7 ]

4 голосов
/ 18 июля 2009

Я рекомендую использовать Authorize.net (только потому, что это то, что я использовал). Вы можете опубликовать информацию о кредитной карте на Authorize.net, чтобы получить (AUTH_CAPTURE, я считаю) информацию о кредитной карте, подлежащей списанию. Затем ваш клиент может войти в виртуальный терминал Authorize.net и взимать или аннулировать каждый платеж в зависимости от наличия ресурсов.

НЕ хранить информацию о кредитной карте, даже если она зашифрована, в базе данных, доступной через Интернет. Я не знаю, где начинается и заканчивается соответствие PCI, но я знаю, что если ваш клиент хранит информацию о кредитной карте, то он должен соответствовать требованиям PCI, принятым кредитными провайдерами. Соблюдение PCI - это боль, и подход, который я рекомендую, является самым простым способом, который я нашел. И с минимальными головными болями для клиента.

4 голосов
/ 18 июля 2009

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

3 голосов
/ 18 июля 2009

Существует большое количество доступных платежных процессоров, которые я бы порекомендовал использовать для POS-машин. Большинство комментариев - это PayPal, Authorize.net, CyberSource ... у всех есть программные API, позволяющие взаимодействовать с вашим сайтом.

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

Последнее, но, вероятно, самое важное, это то, что вам следует внимательно изучить сертификацию соответствия PCI (индустрии платежных карт) (https://www.pcisecuritystandards.org/).. Я считаю, что это быстро становится требованием (если оно еще не было) для принятия данные карты онлайн. В будущем может быть наложен штраф для тех, кто не соблюдает правила.

1 голос
/ 14 августа 2009

Хранение кредитной карты вообще будет осуществляться в соответствии с PCI. Правила и правила PCI являются необычными и подробными. Это не простая проблема. Если бы мне пришлось сделать это снова, я бы посмотрел на покупку тележки, совместимой с PCI, и установил ее, и все было бы сделано с ней.

1 голос
/ 21 июля 2009

Лучше всего использовать асимметричное шифрование. Создайте пару открытых и закрытых ключей RSA. Поместите закрытый ключ в безопасное место. Поместите открытый ключ на ваш веб-сервер. Когда клиенты хотят предоставить данные своей кредитной карты, нажмите на них открытый ключ. Зашифруйте данные с помощью открытого ключа на этой стороне клиента. В OpenSSL посмотрите процедуры Envelope (EVP _ **).

Таким образом, единственный способ восстановить данные кредитной карты в незашифрованном виде - это расшифровка с использованием очень безопасного, никогда не размещаемого в Интернете, никогда не видимого личного ключа компьютера, подключенного к Интернету.

Вы можете создать довольно простое автономное приложение, которое делает это, опять же с OpenSSL.

Учитывая небольшой объем данных, которые вы хотите зашифровать, я думаю, что это довольно практичное решение.

Более эффективное, но более сложное решение состоит в том, чтобы AES зашифровывал данные на стороне клиента, сгенерированной ключом. Затем зашифруйте этот ключ AES, как указано выше (замените кредитную карту на ключ AES в моем решении выше).

1 голос
/ 18 июля 2009

Вы можете сохранить данные кредитной карты в базе данных MySql (другие могут работать, но я незнаком), используя функцию MySql AES_ENCRYPT для шифрования номера карты и затем AES_DECRYPT при получении , Используйте сильный ключ и удалите запись в базе данных после их обработки.

Возможно, есть способ выполнить расшифровку AES с помощью PHP, но я не знаю, как это сделать.

0 голосов
/ 21 июля 2009

Я знаю, что вы спрашивали о решении, которое не включает процессор платежей, но в Канаде есть процессор кредитных карт CurePay, который, как я слышал, относительно дешев (я сам им не пользуюсь). www.curepay.com. Возможно, стоит поблагодарить их, хотя бы узнать о ценах.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...