我只需要存储信用卡的最后 4 位数字

Posted

技术标签:

【中文标题】我只需要存储信用卡的最后 4 位数字【英文标题】:I need to store only last 4 digits of credit card 【发布时间】:2014-09-17 17:30:09 【问题描述】:

我正在使用 Braintree 作为支付网关。 我有一个要求,、到期日期(根据 PCI 投诉)。 我已经在 javascript 中实现了前端代码,并且在向服务器发送数据时,信用卡信息被加密。 无论如何我可以在后端获取最后四位数字、到期日期和卡类型,或者我可以解密吗?

<form name="paymentForm" action="/createtransaction" method="post" id="braintree-payment-form">
   <p>
     <label style="color:white">Card Number</label>
     <input type="text" size="20" ng-model="userDetails.number" autocomplete="off" data-encrypted-name="number" />
   </p>
   <p>
     <label style="color:white">CVV</label>
     <input type="text" size="4" ng-model="userDetails.cvv" autocomplete="off" data-encrypted-name="cvv" />
   </p>
   <p>
     <label style="color:white">Expiration (MM/YYYY)</label>
     <input type="text" size="2" ng-model="userDetails.month" data-encrypted-name="month" /> / <input type="text" size="4" ng-model="userDetails.year" data-encrypted-name="year" />
   </p>
   <input type="submit" id="submit" />

【问题讨论】:

本文展示了您可以采用的几种不同流程:braintreepayments.com/braintrust/client-side-encryption。你用的是哪一个? 我正在使用客户端加密 【参考方案1】:

(披露,我为 Braintree 工作)

由于您使用的是客户端加密,因此您将无法获取信息,因为它在创建交易之前已被加密。但是,一旦您进行了交易,结果对象将包含卡号的前六位/后四位数字和到期日期。然后,您可以将这些值存储在您的数据库中。

它看起来像:

Result<Transaction> result = gateway.transaction().sale(
  ...
);
Transaction transaction = result.getTarget();
CreditCard creditCart = transaction.getCreditCard();
String last4 = creditCard.getLast4();
String expiration = creditCard.getExpirationDate();

【讨论】:

【参考方案2】:

由于您使用的是 Braintree 的 客户端加密 流程,根据他们的文档,您无法访问敏感信息(即信用卡号)的未加密版本。这样做是有目的的,以便您可以降低安全风险并保持 PCI 合规性。

布伦特里states in this post:

一旦用户按下包含他们的表单上的“提交”按钮 信用卡信息,您使用 Braintree 提供的 JavaScript 在表单发布到之前加密敏感字段的库 你的服务器。敏感的非加密数据不包含在 提交的表格,因此永远不会通过您的 系统。但是,您可以使用所有其他字段。这意味着 您可以执行自定义验证、格式化和记录到您的 心的内容,而不会将自己暴露于安全风险和 拥有未加密信用卡的额外 PCI 合规性要求 数据通过您的环境。

另请注意,由于您无权访问解密密钥,因此无法解密数据。

如果您想访问实际敏感的信用卡数据,那么我认为您必须采取不同的方法。 服务器到服务器 流程看起来是您最好的选择。 Braintree 表示:

S2S 的工作方式类似于通过 HTTP 访问任何 API。第一的, 您在您的网站上创建一个表单,用户在其中输入他们的信用 卡数据、账单信息等。当用户提交表单时, 内容被发送到您的服务器。使用您收到的数据, 您使用他们的客户端库之一对 Braintree 进行 API 调用, 检查结果并向您的用户显示必要的信息。

【讨论】:

以上是关于我只需要存储信用卡的最后 4 位数字的主要内容,如果未能解决你的问题,请参考以下文章

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

在 SQL Server 中屏蔽信用卡号

通过多步骤表格传递信用卡号的最安全方法?

在Java中编辑输入数字本身(如预猜测)(输入4位数字后)时的信用卡检测? [复制]

html Miva Merchant:保存最后4位信用卡

防止重复使用信用卡的最佳方法