5

我收到了一些客户的请求,他们希望在线获取客户的信用卡号,然后在终端的 POS 处处理店内付款。我想知道这样做的最佳方法是什么。

我不想以纯文本形式将信用卡号存储在服务器上,也不想发送带有纯文本数字的电子邮件。

客户不想注册在线支付账户,因为在线支付处理器的成本更高且额外。此外,两个客户都不能在线收费,因为总额可能会因为缺货产品或客户要求的问题而改变。

我还有什么其他选择?

我将使用 PHP。如果规则对我应该使用哪种方法有任何影响,我也在加拿大。

4

7 回答 7

4

我通过构建 GPG 前端并允许网站所有者生成自己的 GPG 密钥来解决了这个问题。然后,所有信用卡数据都是 GPG 加密的,并且只能使用网站所有者的私钥解密,如果需要,可以将其与服务器隔离开来,以提高安全性。

于 2009-07-18T12:30:56.020 回答
4

我推荐使用 Authorize.net (只是因为那是我用过的)。您可以将信用卡信息发布到 Authorize.net 以捕获(我相信是 AUTH_CAPTURE)要收费的信用卡信息。然后您的客户可以登录 Authorize.net 虚拟终端并根据可用库存收取或取消每笔付款。

请勿将信用卡信息(即使已加密)存储在可通过 Internet 访问的数据库中。我不知道 PCI 合规性从哪里开始和结束,但我知道如果您的客户存储信用卡信息,那么他们接受的信贷提供商要求他们遵守 PCI。PCI 合规性很痛苦,我推荐的方法是我发现的最简单的解决方法。并为客户带来最小的头痛。

于 2009-07-18T12:37:21.793 回答
3

我建议使用大量的支付处理器,而不是使用 POS 机。大多数评论是 PayPal、Authorize.net、Cyber​​Source... 都有编程 API 让您与您的网站交互。

其次,我使用 Rijndael 加密,因为我相信这是存储卡数据最安全的方式。我竭尽全力将加密密钥隐藏在网络配置之外(单独的文件、注册密钥等)。

最后,但可能最重要的是,您应该认真查看 PCI(支付卡行业)合规性认证 ( https://www.pcisecuritystandards.org/ )。我相信这正在迅速成为在线接受卡数据的要求(如果还没有的话)。将来,不遵守规定的人可能会被罚款。

于 2009-07-18T12:42:16.553 回答
1

您可以使用 MySql AES_ENCRYPT函数将信用卡数据存储在 MySql 数据库中(其他可能有效,但我不熟悉)来加密卡号,然后在检索时使用AES_DECRYPT。使用强密钥并在处理完数据库中的条目后删除它们。

可能有一种方法可以使用 PHP 进行 AES 加密/解密,但我不知道原生方式。

于 2009-07-18T06:19:29.613 回答
1

最好的选择是使用非对称加密。生成 RSA 公钥和私钥对。将私钥放在安全的位置。将公钥放在您的网络服务器上。当客户想要提交他们的信用卡详细信息时,将公钥推送给他们。在此客户端使用公钥加密数据。在 OpenSSL 中,查看 Envelope 例程 (EVP_**)。

这样,恢复明文信用卡数据的唯一方法是使用非常安全、从未放置在网上、从未见过互联网连接的计算机私钥进行解密。

您可以再次使用 OpenSSL 创建一个非常简单的独立应用程序来执行此操作。

考虑到您要加密的数据量很小,我认为这是一个相当实用的解决方案。

一种更有效但更复杂的解决方案是使用 AES 加密客户端生成密钥的数据。然后如上所述加密此 AES 密钥(在我的上述解决方案中用 AES 密钥替换信用卡。)

于 2009-07-20T23:43:30.247 回答
1

完全存储信用卡将符合 PCI 规定。PCI的规章制度繁琐而详细。这不是一个简单的问题。如果我必须重新做一次,我会考虑购买符合 PCI 的推车并安装它并完成它。

于 2009-08-14T16:41:44.323 回答
0

我知道您要求的解决方案不涉及支付处理器,但加拿大有一个名为 CurePay 的信用卡处理器,据我所知相对便宜(我自己不使用它)。www.curepay.com。可能值得给他们一个喊叫,至少要了解定价。

另外,我似乎记得一些关于获取信用卡号码的合规性。存储信用卡或“错误地”处理它们可能会让您面临法律问题。不是想吓唬你,只是确保你肯定正在考虑这样的事情,无论你采用什么解决方案。

于 2009-07-20T23:54:02.953 回答