说服公司不要在我们的网络应用程序中存储信用卡号码

信息安全 php pci-dss mysql 信用卡
2021-09-06 19:12:28

我工作的公司需要一个系统来每月向客户账户收取信用卡费用。客户将能够从用 PHP 编写的在线界面(将通过基于 SSL 的 HTTP 呈现)更新他们的信用卡信息。每月费用将通过同一界面的受密码保护的管理区域手动运行,这基本上相当于对 Authorize.Net 的 API 的批量调用。

我的同事想将(加密的)信用卡信息存储在 MySQL 数据库中。他们计划使用PHP 的 mcrypt 扩展加密信用卡号,大概使用 Rijndael/AES 或 Twofish。密钥管理的主题被掩盖了,但提到了以下两个选项:

  1. 将密钥存储在数据库中,每个信用卡条目都有一个单独的密钥;或者

  2. 将 PHP 文件中所有信用卡条目的单个加密密钥存储为变量(类似于 WordPress 和 MediaWiki 等 PHP 应用程序存储数据库凭据的方式)。

我怎样才能说服他们不要走这条路?我们将使用Authorize.net进行支付处理,所以我提到了他们的客户信息管理器服务作为我们自己存储信用卡信息的替代方案。但是,我对这个主题的了解不足以提出令人信服的论点(我的论点是“我们都不是安全专家”和“我对一家公司以这种方式存储我的信用卡信息感到不舒服”)。

如果我无法说服他们使用像Customer Information Manager这样的第 3 方服务,为了保证客户的信用卡信息安全,我应该记住什么?特别是,我应该如何管理加密密钥?每个客户条目是否应该有一个单独的加密密钥?我可以在哪里存储密钥,以便在将交易发送到 Authorize.Net 之前解密信用卡信息?上面提到的两个选项对我来说似乎不是很合理(但同样,我不太了解这个主题,无法对任何一个提出令人信服的论点)。


更新:我在公司找到了熟悉 PCI DSS 合规性的人,所以我正在与他合作以确保正确完成这项工作。但是,我仍然希望回答我的上述问题(既可以提高我的知识,也可以帮助处于类似情况的其他人)。

更新 2:成功!另一位开发人员坐下来阅读 PCI DSS 指南,并认为自己存储信息毕竟不是一个好主意。我们将使用 Authorize.Net 的客户信息管理器服务。

4个回答

存储卡号意味着您必须遵守 PCI-DSS 的要求,否则您将面临罚款和违反商户账户合同的风险。PCI-DSS 有大量的要求——一些是合理的,一些是繁重的,一些是有问题的有用性——并且遵守它并证明你已经遵​​守它的成本可能非常高。

下载PCI-DSS 2.0 标准并害怕。

特别是,建议的方法都不符合 PCI-DSS。密钥不得在未受保护的情况下存储或与它们保护的持卡人数据存储在同一位置。

如果您必须在内部实现此功能,则需要将涉及卡号的组件与其他所有组件隔离开来,以便 PCI-DSS 仅适用于有限数量的系统。查看令牌化解决方案,以帮助您将持卡人数据暴露降至最低。如果您没有正确执行此操作,您可以轻松地将所有服务器(甚至所有公司台式机!)放到 PCI 范围内,此时合规性变得难以实现。

Authorize.net 提供自动定期计费服务。为了理智,请使用它。

“我们都不是安全专家”和“我不会对公司以这种方式存储我的信用卡信息感到满意”是完全有效的论点。从技术角度(根据案情),他们应该结束讨论。但是,如果您与不是安全专家的人争论,他们可能无法识别好的论点。

所以,如果你发现争论的是非曲直并没有让你有任何收获,那就拿出合规的大锤(对官僚造成 +20 伤害)。特别要提醒他们 PCI DSS。询问他们是否计入了实现 PCI DSS 合规性的成本。要求他们进行成本效益分析,了解此功能将提供多少额外收入(通常,答案是:0)以及业务成本将是多少(通常,答案是:大)。在大多数情况下,这将是游戏结束。

或者,至少它应该结束讨论。如果没有,请与您的经理交谈,因为这最终是一项业务决策,他们应该很快就认出正确的电话。

如果你的经理不明白——好吧,我只能建议:找新的经理。也许是时候更新你的简历了。

听起来您的公司之前没有通过 PCI DSS 现场评估,甚至没有尝试回答 SAQ D 中的所有问题。对于几乎每家拥有的公司,他们都在寻找摆脱持卡人数据,并希望他们这样做不会太昂贵。如果您处于实施解决方案的成本尚不高的地步,则绝对应该将数据存储在 Authorize.net 或其他第 3 方。

您可以向您的同事提出的最佳论点是解释 PCI 的麻烦有多大,以及如果您自己不存储持卡人数据,这种麻烦会减少多少。维护 PCI 合规性是一项全职工作。如果您要存储持卡人数据,则必须满足更多要求才能保持合规性(PCI DSS SAQ D 的长度是 SAQ C 的两倍)。卸载数据是最简单的方法。老实说,我什至不会考虑自己存储数据。

大多数老板/同事不一定了解您可能向他们提出的所有“技术”问题。

因此,您需要在他们可以完全理解的领域解决他们 - 成本/金钱。

我在解释这一点时发现有用的一件事是,如果您被黑客入侵并且信用卡信息被盗,他们将承担责任,不仅要承担罚款,还要承担重新发行新信用卡的费用。

例如:如果您的公司有 100,000 个信用卡号码,在他们支付任何罚款等之前更换这些卡将花费他们 100 万美元(哦,顺便说一句,如果他们不符合 PCI 标准,CFO 可能会入狱)

就像他们为自己的财产买保险一样