Лучшие практики для хранения информации о кредитной карте в базе данных - PullRequest
44 голосов
/ 09 июня 2010

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

Итак, я новичок в системе веб-платежей с кодированием.

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

У меня много идей: шифрование кредитной карты, ограничение безопасности базы данных и т. Д.

Что ты наделал?

Ответы [ 7 ]

84 голосов
/ 09 июня 2010

НЕ ДЕЛАЙТЕ ЭТОГО

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

Многие сторонние компании, которые делают это для вас, уже прошли через все попытки убедиться, что их система безопасна, что они соблюдают местные законы и так далее.Примером в США, который я использовал в прошлом, является authorize.net .В некоторых банках также есть системы, которые вы можете использовать для хранения данных кредитных карт и обработки платежей.

Я понимаю, что в вашей стране, возможно, не такие строгие законы, как в США, но, на мой взгляд, это не оправданиедля того, чтобы катиться самостоятельно.Когда вы имеете дело с деньгами других людей, риск слишком велик, чтобы оправдать его.

33 голосов
/ 09 июня 2010

Для этого я рекомендую комплексный, многоуровневый подход.

Во-первых, сохранение информации о кредитной карте должно быть вариантом.

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

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

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

В-пятых, защитите строку подключения к базе данных.

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

22 голосов
/ 09 июня 2010

При минимуме следуйте PA DSS (Стандарт безопасности данных заявки на платеж). Более подробную информацию можно найти здесь:

https://www.pcisecuritystandards.org/security_standards/pa_dss.shtml

Также было бы разумно взглянуть на PCI DSS, который можно найти здесь:

https://www.pcisecuritystandards.org/security_standards/pci_dss.shtml

2 голосов
/ 10 июня 2010

Вы должны избегать хранения любой информации о кредитной карте из-за рисков для вас и клиентов в связи с этим.

1 голос
/ 28 марта 2013

Authorize.net имеет API менеджера информации о клиентах , который позволяет хранить информацию о клиентах в их системе. Это стоит $ 20 / мес. как дополнение к вашей учетной записи.

1 голос
/ 09 июня 2010

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

Фактически, если вы можете, даже не храните номера зашифрованных карт на том же физическом сервере, что и остальная информация о пользователе.

0 голосов
/ 19 апреля 2016

Я предлагаю вам зашифровать номера карт с помощью надежного алгоритма (аналог AES) и длинного секретного ключа.

Затем храните свой секретный ключ в надежном месте, например на внешнем жестком или оптическом диске.Если вам нужен секретный ключ, используйте внешний жесткий диск.

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

Строгая база данных

  1. Определение строгих пользователей для вашей базы данных
  2. Удаление пользователя root из вашей базы данных, если это не нужно.
...