簡體   English   中英

PayPal 結帳:僅使用客戶端代碼接收付款是否安全?

[英]PayPal Checkout: Is it safe to receive a payment with only client-side code?

我正在使用 PayPal API 將付款選項放到我的網站上。 在他們擁有的教程中,他們使用 JavaScript 在客戶端完全呈現按鈕並設置事務。 這是示例代碼:

<script>
  paypal.Buttons({
    createOrder: function(data, actions) {
      // This function sets up the details of the transaction, including the amount and line item details.
      return actions.order.create({
        purchase_units: [{
          amount: {
            value: '0.01'
          }
        }]
      });
    },
    onApprove: function(data, actions) {
      // This function captures the funds from the transaction.
      return actions.order.capture().then(function(details) {
        // This function shows a transaction success message to your buyer.
        alert('Transaction completed by ' + details.payer.name.given_name);
      });
    }
  }).render('#paypal-button-container');
  //This function displays Smart Payment Buttons on your web page.
</script>

這安全嗎?

用戶只需在自己的代碼中更改支付金額並減少支付。 即使我設置客戶端代碼在交易成功后發送交易 ID(即在 onApprove 發出 POST 請求),以便我可以讓服務器端代碼檢查發送的金額是否正確,客戶端仍然可以更改他這邊的代碼以發送虛假的交易ID。

在交付產品之前,我基本上需要一種機制來檢查我是否確實收到了正確的金額。 我顯然需要在服務器端進行此檢查,但我無法找到一種安全的方法來做到這一點,因為我需要從客戶端獲取一些可能是假的信息。 如何防止用戶通過發送過去的交易 ID 來假裝已付款?

您是正確的,用戶始終可以更改客戶端代碼中的金額,並以較低的金額發送付款。 這就是客戶端支付的工作方式。

跟蹤哪些支付是真實的以及正確金額的任何邏輯都必須在您的服務器上。

對於 PayPal Checkout,這是您應該使用的前端 UI: https://developer.paypal.com/demo/checkout/#/pattern/server

您的服務器上需要兩條對應的路由,一條用於“創建訂單”,一條用於“捕獲訂單”。 您可以使用Checkout-lanuagename-SDK中的一個用於路由對 PayPal 的 API 調用,或者您自己的 HTTPS 實現首先獲得訪問權令牌。 這兩條路線都應僅返回 JSON 數據(無 HTML 或文本)。 在第二條路線中,當捕獲 API 成功時,您應該驗證金額是否正確並將其生成的付款詳細信息存儲在您的數據庫中(特別是purchase_units[0].payments.captures[0].id ,即 PayPal 交易 ID)並在將您的退貨 JSON 轉發給前端調用者之前立即執行任何必要的業務邏輯(例如發送確認電子郵件或預訂產品)。 如果發生錯誤,請轉發 JSON 的詳細信息,因為前端必須處理這種情況。

對不起,但這一切對我來說似乎仍然很不安全。 Once you have given your client-ID in the paypal javascript tag, then any good hacker can use devtools in Google or Firefox, etc. and replace your paypal.buttons code with their own paypal.buttons code and happily send the transaction along to paypal不使用您的客戶端代碼或服務器代碼。

我對這個理論進行了一些測試,在五分鍾或更短的時間內,我能夠重做客戶端 javascript 中的代碼,並為我購買的產品支付任何我想要的費用(這是在測試環境中)。

我在這里缺少什么不會使客戶端代碼完全不安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM