[英]Encrypting credit card details using AngularJS in Braintree
我将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
});
}
无论如何,我可以加密卡详细信息吗?
问题是“为什么Braintree JS不加密AJAX请求数据”,答案与HTTPS无关。
是的,需要HTTPS来加密生产中的流量-在这种情况下,它将加密已经加密的卡数据-但是HTTPS既不是问题,也不是答案。
如果您查看Braintree文档( 此处为示例 ),您会注意到示例表单中的每个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
, 然后根据data--encrypted-name
属性保存这些加密的值, 然后再对这些加密的值进行加密通过HTTP / HTTPS传输表单时使用数据 。
在上面的AngularJS示例代码中,OP 确实在某些input
s上包含了data-encrypted-name
属性(我不知道是否需要在所有这些input
属性上),但仅标记输入是不够的。 仍然需要调用对原始输入值(或在这种情况下为模型数据)进行加密的功能,然后可以在POST
将该加密的模型发送回服务器。
换句话说,问题实现:
正确的实现将是:
这是其他人确实展示的一种动态加密AngularJS模型数据的方法:
http://plnkr.co/edit/2kF9Im?p=preview
如果是我,我会在提交表单之前立即在每个字段上调用braintree.encrypt()
,而不是在每次按键时都调用braintree.encrypt()
-或修改指令以在提交时在表单上工作。
如果使用HTTPS访问您的html页面,则您的表单提交将为HTTPS(除非另有说明)。 如果要确保使用HTTPS,则需要在服务器上执行某些操作以禁止对此特定页面使用HTTP。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.