在我的国家,网上支付并不是一件老事情。去年我第一次看到一个网站应用程序直接将付款打入本地银行账户。
所以,我是一个编写网站支付系统的新手。
我的问题是,将信用卡信息存储到数据库中的最佳实践是什么...
我有很多想法:加密信用卡、数据库安全限制等。
你们做了什么?
在我的国家,网上支付并不是一件老事情。去年我第一次看到一个网站应用程序直接将付款打入本地银行账户。
所以,我是一个编写网站支付系统的新手。
我的问题是,将信用卡信息存储到数据库中的最佳实践是什么...
我有很多想法:加密信用卡、数据库安全限制等。
你们做了什么?
不要这么做
这样做存在的风险太大了,通常你需要接受外部审核,以确保你遵守所有相关的本地法律和安全实践。
有许多第三方公司可以为你提供服务,他们已经费尽心思确保他们的系统是安全的,他们遵守当地法律等等。我过去使用过的一个美国的例子是authorize.net。一些银行也有你可以连接到存储信用卡数据并处理支付的系统。
我知道你所在的国家可能没有像美国那么严格的法律,但在我看来,这并不是自己开发这种系统的借口。当你处理别人的钱时,风险太大而不值得冒险。
在2020年,建议使用Stripe来处理支付信息,避免自行存储支付信息。
历史回答:
针对这个问题,我建议采用全面、分层的方法。
首先,应该提供存储信用卡信息的选项。
其次,数据应该采用强加密方式进行存储。建议使用256位AES加密算法。在选择密钥时,请确保使用整个密钥空间(仅使用生成的随机字母数字符号字符串作为密钥是新手错误)。
第三点,需要妥善保管AES密钥,请勿将其直接嵌入到代码中。如果您正在使用Windows,请考虑使用DPAPI。
第四点,您需要设置数据库权限,以便应用程序和计算机能够按需访问信用卡数据。
第五点,需要安全地保护连接字符串到您的数据库。
第六点,确保任何将访问信用卡数据的应用程序都会正确保护它。
至少需遵循PA DSS (支付应用数据安全标准),更多信息可在此处找到:
https://www.pcisecuritystandards.org/security_standards/pa_dss.shtml
同时,查看PCI DSS也是明智之举,该标准可在此处找到:
https://www.pcisecuritystandards.org/security_standards/pci_dss.shtml
加密,加密,再加密。除非必须要解密,否则不要解密以显示最后四位数字或告知用户他们的卡号是什么。
事实上,如果可能的话,甚至不要将加密后的卡号存储在与其他用户信息相同的物理服务器上。
由于存储信用卡信息存在风险,您和客户都应避免这样做。
我建议您使用类似AES的强加密算法和长的秘钥来加密卡号。
然后,将您的秘钥保存在安全的地方,例如外部硬盘或光盘。需要使用秘钥时,请使用外部硬盘。
如果您正在使用共享主机,则必须将秘钥存储在外部设备中。
严格控制您的数据库