2010-06-08 142 views
35

在我的国家,网上支付并不是一件古老的事情,我第一次看到一个直接向当地银行帐户支付款项的网络应用程序是去年。将CreditCard信息存储到数据库中的最佳做法

因此,我是一个新手编码网络支付系统。

我的问题是,什么是存储的信用卡信息到数据库中的最佳实践...

我有很多想法:加密的信用卡,数据库安全限制等

你做了什么?

+18

作为很多这样的系统的用户,我只是想说谢谢 – reuscam 2010-06-08 23:51:08

回答

73

不这样做

涉及的风险太多太多,您通常需要进行外部审计,以确保您遵守所有相关的当地法律和安全实践。

有很多第三方公司为你做这件事,他们已经经历了一切麻烦,确保他们的系统安全,符合当地法律等等。我在过去使用过的美国的一个例子是authorize.net。有些银行还有一些系统可以用来存储信用卡数据和处理付款。

我意识到你所在的国家可能没有美国那样严格的法律,但在我看来,这并不是推翻自己的借口。当你处理其他人的钱时,风险太高而无法保证。

+0

我甚至认为储蓄信用卡号码是非法的(荷兰)。所以我们用************在xml-transaction-logs中混淆了数字。 – 2010-06-09 00:25:17

+0

这种方法的问题是,许多网站已经限制我的国家作为信用卡的国家...即时通讯深入这种情况下,我会让你知道,如果我可以做你的建议... – 2010-06-09 03:48:03

+0

@Garis :是的,我知道这取决于你的国家可能很难。我会试着问一些较大的银行,因为其中一些银行也提供这种类型的API。 – 2010-06-09 04:35:13

2

加密加密加密。如果您不必绝对必须解密 - 不解密以显示最后4位数字。不要解密告诉用户他们的卡片是什么。

事实上,如果可以的话,甚至不要将加密的卡号与其余的用户信息放在同一台物理服务器上。

+0

谢谢,即时通讯也考虑要求CVV2(后三位数字代码)每次登录的用户要支付任何费用产品... – 2010-06-08 23:57:56

+0

@Garis使用代码的另一个好处是,一些支付网关将减少交易很少,你使用它。当我们转而询问安全代码时,至少我们使用的银行的交易成本更低。 – 2010-06-09 00:00:13

+2

@Garis Suero CVV2代码不允许存储。当您获得CVV2(以及邮政编码和其他信息)时,您的费率将会降低。通常情况下,您可能会收取几种不同的费用,具体取决于是否是奖励卡等。 – 2010-06-09 00:25:47

19

最低限度遵循PA DSS(付款申请数据安全标准)。更多信息可以在这里找到:

https://www.pcisecuritystandards.org/security_standards/pa_dss.shtml

而且这将是明智的,看看PCI DSS,它可以在这里找到:

https://www.pcisecuritystandards.org/security_standards/pci_dss.shtml

+2

* facepalm *,我很愚蠢不要马上想到这一点。 您绝对应该看看PA DSS和PCI标准。 – dplass 2010-06-08 23:59:55

+0

这是非常丰富的...谢谢 – 2010-06-09 00:00:08

+0

这应该是被接受的答案。 – Alan 2014-02-14 18:26:18

31

为此,我建议采用全面的分层方法。

首先,存储信用卡信息应该是一个选项。其次,应使用强大的加密形式安全地存储数据。我推荐使用256位密钥的AES。确保在选择密钥时,使用整个密钥空间(仅仅使用随机生成的字母数字符号字符串作为密钥,这是一个菜鸟错误)。

第三,AES密钥需要妥善保护。不要在代码中嵌入值。如果您使用的是Windows,请考虑使用DPAPI。

第四,您将需要设置数据库权限,以便应用程序和计算机将有权访问需要了解的基础。

第五,保护连接字符串到您的数据库。

第六,确保任何有权访问信用卡数据的应用程序都能正确保护它。

+0

AES没有512位密钥大小。 (可能是Rijndael,但不是AES实现)。 – PaulG 2010-06-09 06:45:08

+1

你说得对。该标准仅规定了最大256个密钥的大小。然而,密钥大小没有实际限制。 – Alan 2010-06-09 08:22:27

+0

你知道一个好的地方将存储密钥在unix系统的位置吗?由于加密与密钥本身的安全性一样好,我担心如何保护它。 – Jason 2012-03-02 18:23:47

2

您应该避免存储任何信用卡信息,因为这会对您和您的客户造成风险。

-2

我建议你用强大的算法(类似AES)和长密钥加密卡号。

然后,将您的密钥保存在类似外部硬盘或光盘的安全位置。 当您需要密钥时,请使用外部硬盘。

如果您使用的是共享主机,则必须将您的密钥存储在外部设备中。

严格的数据库

  1. 定义严格的用户提供数据库数据库的
  2. 删除root用户如果不需要它。
相关问题