我已经通读了 Saving credit card information in MySQL database?和 Storing Credit Card Information .
我知道存储信用卡信息需要 PCI 合规性,这不是一件容易的事。
这不是这个问题的目的。我的问题如下:
加密用户信用卡的安全方法是什么?想到的最简单和最容易的是使用私钥并用它加密 CC。这看起来不太安全,因为 key 必须存储在服务器上,如果攻击者可以获得我的数据库,他们也可能获得 key 。
我希望能够做的是在加密过程中使用该用户密码对每个 CC 进行加密。如果有人获得数据库,他们将无法解密任何内容,因为密码存储为加盐哈希。这对于交易购买非常有用——用户点击“购买”,输入他们的密码作为确认,我解密他们的 CC 并进行收费。他们的密码仅在请求期间存在于内存中,永远不会写入磁盘。
不幸的是,这不适用于我正在尝试构建的服务 - 一项收取经常性费用(例如,每月一次)的服务,无论我需要收费时用户是否登录.
鉴于这种情况,是否有一种安全的方式来存储用户 CC?
最佳答案
由于您需要能够解密,所以加密 key 总是有可能泄露,您将失去一切。因此,您永远无法获得绝对的安全性,但可以让攻击者更难获取数据。
除了您之外,没有人可以真正判断您应该拥有什么级别的安全性(或模糊性)。这很可能是数据库大小、可见性等的函数。
对于泄漏,不幸的是,您必须假设所有内容迟早都会泄漏(例如,对弱密码进行暴力攻击),当它们泄露时您并没有得到太多。
考虑到最近的信用卡泄露丑闻 - 最糟糕的是将 3 位数 (CVV) 号码与普通信用卡号码一起保存,信用卡公司明确禁止这样做(这就是为什么你总是必须再次提供它,即使如果有人存档了您的信用卡信息)
如果您不想承担持有和处理此类数据的责任,一个好的方法是使用外部支付服务 - 让他们进行处理并向您断言付款已处理.您必须为他们的服务付费,但您也必须为实现您自己的解决方案和承担风险付费。
关于mysql - 如何安全地加密数据库中的信用卡信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11046167/