gpt4 book ai didi

javascript - 在 Braintree 中使用 AngularJS 加密信用卡详细信息

转载 作者:行者123 更新时间:2023-11-29 16:12:09 24 4
gpt4 key购买 nike

我正在使用 Braintree 作为支付网关,但我遇到了一个问题。
我正在发送信用卡信息和其他用户详细信息。

出于安全目的,必须对信用卡信息进行加密,Braintree 通过以下方式进行加密:

braintree.onSubmitEncryptForm('braintree-payment-form');

直到我在前端使用纯 javascript (AngularJS) 并且我看到数据在发送到服务器时未加密,这才正常工作,
这是代码:

<form name="paymentForm" ng-submit="submitUser(userDetails)" method="post" id="braintree-payment-form">
<p>
<label style="color:white">Name</label>
<input type="text" ng-model="userDetails.userName" name="userName" size="20" />
</p>
<p>
<label style="color:white">Email</label>
<input type="text" ng-model="userDetails.email" name="email" size="20"/>
</p>
<p>
<label style="color:white">Company</label>
<input type="text" ng-model="userDetails.company" name="company" size="20" />
</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" />

在提交表单时,我正在向服务器发送数据。

$scope.submitUser = function(userDetails){
$http({
url: '/createtransaction',
method: 'POST',
data: JSON.stringify(userDetails),
headers: {'Content-Type': 'application/json'}
}).success(function (data, status, headers, config) {
// success
}).error(function (data, status, headers, config) {
//error
});
}

无论如何我可以加密卡的详细信息吗?

最佳答案

问题是“为什么AJAX请求数据没有被Braintree JS加密”,答案与HTTPS无关。

是的,需要 HTTPS 来加密生产中的流量 - 在这种情况下,它将加密已经加密的卡数据 - 但 HTTPS 既不是问题也不是答案。

如果您查看 Braintree 文档 (Example here),您会注意到示例表单中的每个 input 都添加了一个属性 data-encrypted-name:

<input type="text" size="20" autocomplete="off" data-encrypted-name="number" />

然后文档指出这段代码:

braintree.onSubmitEncryptForm('braintree-payment-form');

提交表单时,调用 braintree.js 中的代码,检查表单,查看每个标记的 input 中的纯文本,加密,保存这些根据 data--encrypted-name 属性加密值,然后在通过 HTTP/HTTPS 传输表单时使用加密数据

在上面的 AngularJS 示例代码中,OP 确实在某些 input 上包含 data-encrypted-name 属性(我不知道它是否需要在所有这些上)但仅仅标记输入是不够的。仍然需要调用加密原始输入值(或在本例中为模型数据)的函数,然后可以在 POST 中将加密模型发送回服务器。

换句话说,问题实现:

  1. 形式建立模型
  2. 模型通过 HTTP 发送到服务器

更正后的实现是:

  1. 形式建立模型
  2. 调用 Braintree.js 来加密模型的某些部分。
  3. 加密模型通过 HTTP(或生产环境中的 HTTPS)发送到服务器

这是一个别人做的 plunkr 展示了一种动态加密 AngularJS 模型数据的方法:

http://plnkr.co/edit/2kF9Im?p=preview

如果是我,我会在提交表单之前立即在每个字段上调用 ​​braintree.encrypt(),而不是在每次按键时调用 - 或者修改指令以处理表单提交时间。

关于javascript - 在 Braintree 中使用 AngularJS 加密信用卡详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24985531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com