Недавно я внедрил PayPal JavaScript SDK в свой проект Angular 11 (ссылка на реализацию). Кажется, что это работает безупречно, однако я начал думать, что можно было бы изменить сумму цены на стороне клиента. Кроме того, похоже, что на стороне 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 с тихим вызовом ajax
- Как я могу защитить выполненные транзакции с помощью кнопок PayPal Smart Checkout на стороне клиента?
- Безопасная клиентская сторона PayPal Checkout?
- PayPal Checkout: есть безопасно ли получать платеж только с кодом на стороне клиента?
В целом консенсус был примерно таким: вы правы, это небезопасно, вам нужно делать это на бэкэнде.
Однако, хотя сейчас я понимаю, что это не кажется безопасным долгосрочным решением, ни один из ответов в сообщениях выше не дал некоторой дополнительной информации о том, как злоумышленники могут практически изменить код на стороне клиента. У меня довольно мало опыта в модификации клиентского кода JavaScript, поэтому я был бы очень признателен, если бы разобрался в процессе и узнал, в какой степени я должен защищать свое приложение.
this.pricing
- person Taplar   schedule 18.12.2020