Рекомендации по хранению информации о кредитных картах в базе данных


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

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

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

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

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

7 40

7 ответов:

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

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

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

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

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

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

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

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

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

В miniumum следуйте PA DSS (Payment Application Data Security Standard). Более подробную информацию можно найти здесь:

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

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

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

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

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

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

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

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

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

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

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

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