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

2024-05-21

我正在使用 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请求数据没有加密通过布伦特里 JS”,答案与 HTTPS 无关。

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

如果您查看 Braintree 文档(示例在这里 https://www.braintreepayments.com/docs/python/guide/getting_paid)你会注意到每个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 示例代码中,OPdoes包括data-encrypted-name一些属性inputs (我不知道是否需要在所有这些上),但仅仅标记输入是不够的。仍然需要调用对原始输入值(或在本例中为模型数据)进行加密的函数,然后可以将加密的模型以POST返回到服务器。

换句话说,问题的实现:

  1. 表单构建模型
  2. 模型通过 HTTP 发送到服务器

更正后的实现将是:

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

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

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

如果是我的话我就打电话braintree.encrypt()在提交表单之前立即在每个字段上执行,而不是在每次按键时执行 - 或者修改指令以在提交时处理表单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Braintree 中使用 AngularJS 加密信用卡详细信息 的相关文章

随机推荐

  • 如何使用 Poetry 从现有项目导入requirements.txt

    我正在尝试Poetry https python poetry org 在现有项目中 它最初使用 pyenv 和 virtualenv 所以我有一个requirements txt包含项目依赖项的文件 我想导入requirements tx
  • socket.io 中的消息排序

    socket io 是否保证 on 回调将按照消息发出的顺序调用 Node js 是单个事件循环 所以是的 但是你还有另一个问题 考虑你和你的客户端之间的延迟 如果两个客户端发送消息 到达服务器的第一条消息将首先被处理 所以如果第一个客户端
  • Node + Express 会话过期?

    我有一个 Express 应用程序 并且有一个登录表单 我需要持续 1 个月的会话 我是否将 maxAge 设置为一个月 以毫秒为单位 我让两台计算机保持打开状态并登录了 24 小时 当我回来时 两台计算机都已注销 我该如何解决这个问题 实
  • UL 标签内的标签 H3 [重复]

    这个问题在这里已经有答案了 可能的重复 UL 中是否允许除 LI 之外的任何内容 https stackoverflow com questions 6056142 is anything except lis allowed in a u
  • 有没有办法将搜索栏添加到我的实际首选项屏幕?

    我一直看到有关添加您自己的搜索栏首选项的教程 但它不在我实际的 prefs xml 中 有什么方法可以在我的主偏好设置屏幕中添加一个 或者我必须将其分开 Google 似乎有 2 个滑块首选项 搜索栏首选项 https github com
  • Python Matplotlib 箱线图颜色

    我正在尝试使用 Matplotlib 制作两组箱线图 我希望每组箱线图 以及点和晶须 以不同的颜色填充 所以基本上情节上会有两种颜色 我的代码如下 如果您能帮助将这些图绘制成彩色 那就太好了 d0 and d1是每个数据列表的列表 我想要一
  • 将文件名附加到 R 中的数据框

    我想将文件名附加到我的表中 但它似乎并没有真正起作用 我正在做的是迭代文件名列表 打开它们 将所有数据附加到一个数据帧 对于每个附加文件 我想添加其文件名 我希望将其附加到每一行 以便稍后当我查看数据时 我会知道给定行源自哪个文件 但似乎并
  • 从 scikit_learn 反转 MinMaxScaler

    为了为我的生成神经网络提供数据 我需要将一些数据标准化在 1 和 1 之间 我用MinMaxScaler来自 Sklearn 效果很好 现在 我的生成器将输出 1 到 1 之间的数据 如何恢复MinMaxScaler获得真实数据 让我们首先
  • PHPStorm - 无效的后代文件名

    我正在尝试将 Windows 7 PC 上的本地 PHPStorm 项目与 Ubuntu 服务器同步 当我尝试任何类型的连接 例如 测试 SFTP 连接 时 它会失败并显示 Invalid descendent file name C np
  • MySQL小写自动转换

    我有多个在数据库表中写入数据的 Web 服务 我想针对特定字段自动将大写字符串转换为小写字符串 mysql 有没有执行此任务的函数 假设这是表 id name language 有时 在语言字段内 Web 服务会写入大写字符串 IT 我想直
  • Spring批处理条件流创建无限循环

    我有一个简单的三步流程 public Job myJob Step extract extractorStep Step process filesProcessStep Step cleanup cleanupStep return jo
  • C语言中数据类型BYTE、WORD和DWORD的格式说明符?

    在 C 语言中 与 printf 和 scanf 函数一起使用的数据类型 BYTE WORD 和 DWORD 最合适的格式说明符是什么 我很难通过控制台显示 BPB 字段的值 例如 如果我尝试使用 lu 显示 BPB BytsPerSec
  • NSURLConnection 的 URL 文件大小 - Swift

    我想在下载之前从 url 获取文件大小 这是 obj c 代码 NSURL URL NSURL URLWithString ExampleURL NSMutableURLRequest request NSMutableURLRequest
  • 如何修复“缺少表的 FROM 子句条目”错误

    我正在尝试根据游戏 ID 获取平台名称 我有如下三个表 我正在尝试加入它们以获得所需的结果 Games Id 1 2 3 4 Game Platforms Id game id platform id 1 1 1 2 1 2 3 3 3
  • AWS Route 53 - 公共子域无法公开访问?

    我已购买域名company com并创建公共子域sales company com 路由53中的公共托管区域 我将子域映射 创建 A 记录 到内部应用程序负载均衡器 ALB 即该 ALB 只能在我的公司网络内访问 我的理解是公共子域可以映射
  • Internet Explorer 8 事件因透明父母而失败

    例如 当您有一个透明的 div 并单击 in 时 该单击会直接传递到下面的元素 这种行为在其他现代浏览器中并不存在 而且我确信这也不符合 W3C 的建议 最后 它打乱了我的设计 有什么办法可以解决这个问题吗 说明 透明 例如没有定义背景颜色
  • 毕加索磁盘缓存

    我正在使用 Picasso 从 URL 加载图像 Picasso with getApplicationContext load product getImageUrl into imageView 据我所知 每次都会访问该网址 而不是缓存
  • 用PHP动态生成二维码[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试在我的网站上生成二维码 他们所要做的就是在其中包含一个 URL 我网站上的变量将提供该 URL
  • 定义 types.Dict 和 dict 之间的区别?

    我正在练习使用 Python 3 5 中的类型提示 我的一位同事使用typing Dict import typing def change bandwidths new bandwidths typing Dict user id int
  • 在 Braintree 中使用 AngularJS 加密信用卡详细信息

    我正在使用 Braintree 作为支付网关 但遇到了一个问题 我正在发送信用卡信息和其他用户详细信息 出于安全目的 信用卡信息必须进行加密 Braintree 对此进行了加密 包括以下内容 braintree onSubmitEncryp