PHP Хранение данных карты с использованием стандартов PCI ИЛИ использование третьей стороной для хранения данных карты?

Итак, сегодня я столкнулся с непростым вопросом. В настоящее время я работаю над платежным интерфейсом приложения, которое разрабатываю. Я должен предоставить будущим пользователям приложений возможность хранить и редактировать данные своей платежной карты для удобной проверки. Каждый бизнес в моей отрасли делает то же самое. Поэтому предоставление моим пользователям возможности добавлять и редактировать данные карты является обязательным.

Я думал о том, чтобы хранить данные карт пользователей в базе данных AWS RDS, которую мы арендуем, используя стандарты PCI. Я планирую использовать PHP и mcrypt вместе с солью и перцем для шифрования и расшифровки данных карты, когда это необходимо.

Ребята, вы считаете, что сохранение платежных данных в нашей базе данных будет подходящим вариантом в этом случае? или есть какие-либо сторонние поставщики, которые будут хранить для нас платежные реквизиты пользователя?

Важно отметить, что мы будем использовать наши собственные торговые счета для некоторых транзакций, а для других мы будем использовать учетные записи различных поставщиков для обработки наших транзакций ЧЕРЕЗ их API.

Спасибо


person Logical Nonsense    schedule 24.04.2019    source источник
comment
См.: stackoverflow .com/questions/3328922/   -  person John Conde    schedule 25.04.2019
comment
Спасибо, Джон! Я не уверен, что это будет правильный вариант, поскольку мы будем использовать несколько торговых счетов, а также будем передавать данные карты нашим доверенным сторонним поставщикам.   -  person Logical Nonsense    schedule 25.04.2019
comment
Это не звучит как отличная идея. Возможно, вы захотите найти альтернативный способ обработки этих платежей, так как это создаст массу проблем, особенно с возвратными платежами.   -  person John Conde    schedule 25.04.2019
comment
Спасибо! У нас действительно нет других вариантов, о которых я знаю. Мы работаем в индустрии туризма, и в большинстве случаев нам приходится передавать данные карты отелям и, в некоторых случаях, поставщикам. Я чувствую, что все в нашей отрасли хранят платежные реквизиты. Если бы вы были в такой ситуации, что бы вы лично сделали? Я серьезно отношусь к безопасности и хочу делать то, что лучше для бизнеса и потребителей.   -  person Logical Nonsense    schedule 25.04.2019
comment
Просто предложение. Убедитесь, что вы добавили обратный прокси в свой дизайн. Требуется для стандарта хранения данных PCI   -  person Ashish Singh    schedule 26.04.2019


Ответы (1)


Я бы рекомендовал следующую схему:

https://aws.amazon.com/blogs/security/how-to-enhance-the-security-of-sensitive-customer-data-by-using-amazon-cloudfront-field-level-encryption/

Cloudfront -> Шлюз API -> Lambda -> RDS

Функция Lambda — это единственное место, где есть доступ к закрытому ключу RSA для расшифровки значения поля, зашифрованного Cloudfront. Затем развернитесь и повторно зашифруйте информацию о держателе карты с помощью AWS Encryption SDK и, наконец, сохраните ее в RDS. Этой лямбде разрешено использовать только ключ KMS для шифрования. Создайте отдельную лямбда-функцию, отвечающую за чтение данных из RDS, их расшифровку с помощью KMS и передачу третьей стороне.

В решении гораздо больше дьявольских деталей, но, по крайней мере, вы не собираетесь скомпрометировать свое PHP-приложение и раскрыть огромное количество кредитных карт, если будете следовать этому плану. В конце концов, вы хотите ограничить количество мест, где обрабатывается информация о держателях карт, чтобы уменьшить риск аудита PCI. Я бы даже сказал, что нужно иметь отдельный VPC и RDS для данных держателя карты. Верните «токены» в ваше приложение для справки.

person JonathanT    schedule 26.04.2019
comment
Не могли бы вы поделиться этими подробностями? - person Perry Tew; 26.04.2019