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

Javascript 在Braintree中使用AngularJS加密信用卡详细信息,javascript,angularjs,payment-gateway,credit-card,braintree,Javascript,Angularjs,Payment Gateway,Credit Card,Braintree,我正在使用Braintree作为支付网关,我遇到了一个问题。 我正在发送带有其他用户详细信息的信用卡信息 出于安全目的,必须对信用卡信息进行加密,Braintree正在通过以下方式进行加密: braintree.onSubmitEncryptForm('braintree-payment-form'); 这很好,直到我在前端使用纯javascript(AngularJS),并且我发现数据在发送到服务器时没有加密, 以下是代码: <form name="paymentForm" ng-su

我正在使用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" />

是否有我可以加密卡片详细信息的方法?

如果您的html页面是使用HTTPS访问的,则您的表单提交将是HTTPS(除非另有规定)。如果您想确保使用HTTPS,那么您需要在服务器上做一些事情来禁止此特定页面使用HTTP。

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

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

如果您查看Braintree文档(),您会注意到示例表单中的每个
输入都添加了一个属性
数据加密名称

<input type="text" size="20" autocomplete="off" data-encrypted-name="number" />
提交表单时,调用
braintree.js
中的代码,检查表单,查看每个标记的
input
中的纯文本,对其进行加密,根据
数据--encrypted name
属性保存这些加密值,然后在通过HTTP/HTTPS传输表单时使用加密数据

在上面的AngularJS示例代码中,OP确实在一些
输入
上包含了
数据加密名称
属性(我不知道是否需要在所有输入上都包含),但仅仅标记输入是不够的。仍然需要调用加密原始输入值(或者在本例中是模型数据)的函数,然后可以通过
POST
将加密模型发送回服务器

换句话说,问题在于实施:

  • 表单构建模型
  • 模型通过HTTP发送到服务器
  • 正确的执行将是:

  • 表单构建模型
  • 调用Braintree.js对模型的某些部分进行加密
  • 加密模型通过HTTP(或生产中的HTTPS)发送到服务器
  • 下面是其他人做的一个plunkr演示了一种动态加密AngularJS模型数据的方法:


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

    正如Dan所说,HTTPS是这里的关键。JS加密技术不真正安全的原因在这里得到了很好的解释:我不认为HTTPS是这个问题中的问题,尽管我同意在生产中HTTPS当然是一个要求。我同意,我的回答有点幼稚。我将很快了解更多,因为我正在将使用braintree的jquery应用程序转换为使用angular。
    <input type="text" size="20" autocomplete="off" data-encrypted-name="number" />
    
    braintree.onSubmitEncryptForm('braintree-payment-form');