将CreditCard信息存储到DataBase中的最佳实践
在我国,网上支付并不是一件老旧的事情,去年我第一次看到一个直接向当地银行账户付款的networking应用程序。
所以,我是一个新手编码networking支付系统。
我的问题是,什么是将信用卡信息存储到数据库中的最佳做法…
我有很多想法:encryption信用卡,数据库安全限制等。
你做了什么?
不要这样做
涉及的风险太多了,您通常需要进行外部审计,以确保您遵守所有相关的当地法律和安全做法。
有很多第三方公司为你做这件事,已经经历了一切麻烦,确保他们的系统是安全的,他们遵守当地的法律等等。 在过去的美国,我使用的一个例子是authorize.net 。 一些银行也有系统,您可以挂钩存储信用卡数据和处理付款。
我意识到你所在的国家可能没有美国那么严格的法律,但是我认为这并不是推翻自己的借口。 当你处理别人的钱时,风险太高了。
为此,我推荐一个全面的,分层的方法。
首先,存储信用卡信息应该是一个选项。
其次,应使用强大的encryptionforms安全地存储数据。 我推荐使用256位密钥的AES。 确保select密钥时,使用整个密钥空间(使用随机生成的字母数字符号string作为密钥是个菜鸟错误)。
第三,AES密钥需要妥善保护。 不要在代码中embedded值。 如果您使用的是Windows,请考虑使用DPAPI。
第四,你将要设置数据库权限,以便应用程序和计算机可以访问需要知道的基础。
第五,保护连接string到你的数据库。
第六,确保任何可以访问信用卡数据的应用程序都能够妥善保护它。
在最低限度遵循PA DSS(支付应用程序数据安全标准)。 更多信息可以在这里find:
https://www.pcisecuritystandards.org/security_standards/pa_dss.shtml
看看PCI DSS也是明智的,可以在这里find:
https://www.pcisecuritystandards.org/security_standards/pci_dss.shtml
您应该避免存储任何信用卡信息,因为这样做会对您和您的客户造成风险。
encryptionencryptionencryption。 如果不是绝对必须解密,不要解密以显示最后4位数字。 不要解密告诉用户他们的卡是什么。
实际上,如果可以的话,甚至不要将encryption的卡号与其余的用户信息放在同一台物理服务器上。
Authorize.net有一个客户信息pipe理器API ,允许您将客户信息存储在他们的系统中。 它的成本为20美元/月。 作为您的帐户的附加组件。
我build议你用一个强大的algorithm(相似的AES)和一个长密钥来encryption卡号。
然后,将您的密钥保存在类似外部硬盘或光盘的安全位置。 当您需要密钥时,请使用外部硬件。
如果您使用共享主机,则必须将密钥存储在外部设备中。
严格你的数据库
- 为数据库定义严格的用户
- 如果不需要,请删除数据库的root用户。