【发布时间】:2021-03-29 09:05:11
【问题描述】:
我最近在我的 Angular 11 项目 (implementation reference) 中实现了 PayPal JavaScript SDK。它似乎完美无缺,但是,我开始认为可以在客户端修改定价金额。此外,如果支付的金额实际上与请求的金额相符,PayPal 方面似乎没有进一步的验证。
paypal.Buttons({
style: {
layout: 'vertical',
color: 'gold',
shape: 'pill',
label: 'paypal'
},
createOrder: (data, actions) => {
console.log(data);
return actions.order.create({
purchase_units: [
{
reference_id: this.id,
description: this.description,
amount: {
currency_code: 'EUR',
value: this.pricing
}
}
]
});
},
onApprove: (data, actions) => {
console.log(data);
return actions.order.capture();
},
onError: error => {
console.error(error);
},
onCancel: error => {
console.error(error);
}
}).render(this.paypalElement.nativeElement);
因此我开始研究客户端安全性,尤其是 PayPal SDK。在这个过程中,我在 stackoverflow 上发现了一些有趣的帖子,例如:
- PayPal express checkout security with silent ajax call
- How can I secure transactions made with client-side PayPal Smart Checkout buttons?
- Secure PayPal Checkout Client-side?
- PayPal Checkout: Is it safe to receive a payment with only client-side code?
总体共识是:“您说得对,它不安全,您需要在后端执行此操作。”
然而,虽然我现在意识到这似乎不是一个安全的长期解决方案,但上述帖子中的答案都没有提供一些关于攻击者如何实际修改客户端代码的额外信息。在修改客户端 JavaScript 代码方面,我相当缺乏经验,因此我非常希望了解该过程并了解我必须在多大程度上保护我的应用程序。
【问题讨论】:
-
逻辑中的简单调试器断点将授予攻击者对修改变量的完全访问权限,例如
this.pricing
标签: javascript security paypal paypal-rest-sdk