如何将信用卡数据保存在数据库中?

Posted

技术标签:

【中文标题】如何将信用卡数据保存在数据库中?【英文标题】:How to save credit card data in a database? 【发布时间】:2016-10-01 10:49:56 【问题描述】:

我正在开发一个需要存储整个信用卡号的应用程序。使用任何 API 都可以做到这一点吗?

我已经阅读了 Authorize.net 的 Customer Payment Profile 选项,但当您尝试检索该付款资料时,它只提供最后 4 位数字。

我还检查了Braintree 的v.zero API,它给出了前 6 位和后 4 位数字以及 Stripe 的客户创建选项,但它也只给出了后 4 位数字。

如果没有可用的 API,存储信用卡号的唯一方法是使用 PCI DSS 将其存储在内部?

【问题讨论】:

【参考方案1】:

披露:我为 Stripe 工作

是的,在内部存储客户卡信息的唯一方法是在符合 PCI 的系统中进行。您存储它们的任何地方以及处理它们的任何方式都必须符合 PCI 标准。

使用诸如 Stripe 之类的支付处理器的最大好处之一是,它们会为您处理(非常、难以置信、可怕地)艰苦的 PCI 合规工作。作为该承诺的一部分,他们不会公布他们孜孜不倦地确保安全的信用卡详细信息。

如果您愿意经历成为 - 并保持 - PCI 兼容的严格要求,您可以以 PCI 兼容的方式收集和存储卡号,并使用 Stripe 的 API 创建卡 [0],然后制作费用。请注意,您必须符合 PCI 标准才能以这种方式使用 Stripe 的 API,否则您将违反服务条款。

如果您可以更全面地解释应用程序将使用存储的信用卡号做什么,也许有人可以建议一种不需要在本地实际存储卡信息的替代方法。

[0]https://stripe.com/docs/api#create_card-source-number

【讨论】:

令牌基本上不是有效的信用卡标识符,因此,无论如何都需要 PCI 合规性? 不,Token ID 是一个随机字符串。它与实际卡详细信息的映射是在 Stripe 中处理的,如果没有您的 API 密钥,令牌将毫无意义。 Stripe 无法预先计算卡费 %,例如在澳大利亚有两种费率,一种用于本地卡,一种用于国际卡,因此 Stripe 无法提供一种检查方式,导致成千上万的企业因技术实施而违反法律(这很容易做到),那么根据新法律,您必须找到您收取的费率,因此您需要前 6 位数字来查找卡的来源.我们不存储前 6 位数字,我们存储卡级别和发行国家/地区,以防欺诈,并在上面进行计算,因为 Stripe 无法做到这一点。 所以只要你不存储信息,那么只要你在查找以解决stripe系统中的缺陷后销毁内存中的数据,就不需要遵守PCI。 Stripe 不是唯一存在此问题的网关,许多美国网关没有按照 AU 和其他法律实施。 (也就是在澳大利亚,我们不能使用条纹,因为它迫使我们违反法律 - 也就是在使用该卡的情况下收取国际费率) @Dawesi 我想你可能想在这里联系支持:support.stripe.com/email/login【参考方案2】:

在任何情况下都不要存储客户的信用卡信息。解释为什么你认为你需要它; Stripe API 可能会做你想做的事。例如,如果您想向之前向您付款的客户收取定期费用,请使用customer subscription。

在任何情况下都不要存储客户的信用卡信息。如果 Stripe 发现您试图这样做,他们可能会禁止您。这很好,因为如果 Stripe 没有抓到你,犯罪分子就会抓到。比如从Target和Walmart中提取信用卡信息的犯罪分子。

【讨论】:

前 6 位数字表示卡类型,以及银行和卡级别(即卡的费用级别) 这对于了解您被收取的费用非常重要。现在这种做法越来越普遍,特别是在澳大利亚,新法律禁止对信用卡交易收取超额费用。个人我们不存储号码,我们只是使用号码获取详细信息,然后丢弃号码。这样风险就会低很多(而且您的商业保险也会更低)

以上是关于如何将信用卡数据保存在数据库中?的主要内容,如果未能解决你的问题,请参考以下文章

如果我正在创建一个在线商店并(第一次)使用 stripe api,我应该将信用卡信息保存在我的数据库中吗?

我可以在数据库中保存信用卡密码吗?

通过双向加密将信用卡数据保存在移动设备上

在条纹中添加客户的信用卡信息

Node.js 和 MongoDB 支付和存储信用卡数据 [关闭]

在没有 PCI 合规性的情况下保存信用卡