Php 不经处理就在线获取信用卡信息——如何做到最好?

Php 不经处理就在线获取信用卡信息——如何做到最好?,php,encryption,e-commerce,credit-card,pci-dss,Php,Encryption,E Commerce,Credit Card,Pci Dss,我收到了许多客户的请求,他们希望在线获取客户的信用卡号码,然后在终端的POS机上在商店中处理付款。我想知道做这件事最好的方法是什么 我不想在服务器上以纯文本形式存储信用卡号,也不想发送带有该号码的纯文本电子邮件 客户不想注册在线支付账户,因为在线支付处理器的成本更高、更高。此外,两位客户都不能在线收费,因为由于缺货或客户请求出现问题,总金额可能会发生变化 我还有其他选择吗 我将使用PHP。如果规则对我应该使用哪种方法有任何影响,我也在加拿大。您可以使用MySql函数加密卡号,然后在检索时将信用卡

我收到了许多客户的请求,他们希望在线获取客户的信用卡号码,然后在终端的POS机上在商店中处理付款。我想知道做这件事最好的方法是什么

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

客户不想注册在线支付账户,因为在线支付处理器的成本更高、更高。此外,两位客户都不能在线收费,因为由于缺货或客户请求出现问题,总金额可能会发生变化

我还有其他选择吗


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

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


可能有一种方法可以用PHP进行AES en/解密,但我不知道有一种本地方法。

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

我建议使用Authorize.net(仅因为我使用了该私钥)。您可以将信用卡信息发布到Authorize.net以捕获(我相信是AUTH_capture)要收费的信用卡信息。然后,您的客户可以登录到Authorize.net虚拟终端,并根据可用库存收取或取消每笔付款


不要将信用卡信息(即使已加密)存储在可通过互联网访问的数据库中。我不知道PCI合规性从何处开始和结束,但我知道,如果您的客户正在存储信用卡信息,那么他们接受的信用卡提供商要求他们符合PCI合规性。PCI合规性是一个难题,我推荐的方法是我发现的最简单的解决方法。而且对客户来说,最省事的是。

有大量可用的支付处理器,我建议不要使用POS机。大多数评论都是贝宝,Authorize.net,CyberSource。。。所有这些都有编程API,可以让您与您的站点交互

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


最后,但可能是最重要的一点是,您应该重点关注PCI(支付卡行业)合规性认证()。我相信这很快就会成为在线接受信用卡数据的要求(如果还没有的话)。将来,那些不遵守规定的人可能会被罚款。

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

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

您可以创建一个非常简单的独立应用程序来实现这一点,同样使用OpenSSL

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


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

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


此外,我似乎还记得一些关于信用卡号的合规性问题。存储信用卡或“不正确”地处理信用卡可能会给你带来法律麻烦。不是想吓唬你,只是要确保无论你采用什么解决方案,你都在考虑这样的事情。

存储信用卡都将符合PCI法规。
PCI的规则和规则是华丽而详细的。这不是一个简单的问题。如果我必须再做一次,我会考虑购买一个符合PCI标准的购物车并安装它,然后再使用它。

在第一次按存储容量使用计费之前,这一切都会很好。您的文件上不会有签名,您的处理器会想知道为什么。在线交易和持卡交易的费率更高是有原因的。一个客户在他们进来取产品时让客户签字(房车租赁)。另一位客户经常在电话中接收卡号,但没有签名,而且没有问题。通常我会同意你的看法。不过,两位客户都不能在线收费,因为总金额可能会因为缺货或客户要求的问题而发生变化。我知道这并不能直接解决问题,但它直接涉及到这个答案:如果你进行授权,它会冻结资金,即使你最终不向卡收费。如今,每个人都在网上银行对账单上打电话,这是一场客户服务噩梦,因为他们认为你已经向他们收取了费用,而你却没有。最好的方法是使用服务(如Aut)