代码之家  ›  专栏  ›  技术社区  ›  Duck

这不是安全风险吗?

  •  -1
  • Duck  · 技术社区  · 4 年前

    我即将在网站上实施付款。

    我见过使用以下Javascript代码的解决方案

    function onBuyClicked() {
      if (!window.PaymentRequest) {
        // PaymentRequest API is not available. Forwarding to
        // legacy form based experience.
        location.href = '/checkout';
        return;
      }
    
      // Supported payment methods
      var supportedInstruments = [{
          supportedMethods: ['basic-card'],
          data: {
            supportedNetworks: [
              'visa', 'mastercard', 'amex', 'discover',
              'diners', 'jcb', 'unionpay'
            ]
          }
      }];
    
      // Checkout details
      var details = {
        displayItems: [{
          label: 'Original donation amount',
          amount: { currency: 'USD', value: '65.00' }
        }, {
          label: 'Friends and family discount',
          amount: { currency: 'USD', value: '-10.00' }
        }],
        total: {
          label: 'Total due',
          amount: { currency: 'USD', value : '55.00' }
        }
      };
    
      // 1. Create a `PaymentRequest` instance
      var request = new PaymentRequest(supportedInstruments, details);
    
      // 2. Show the native UI with `.show()`
      request.show()
      // 3. Process the payment
      .then(result => {
        // POST the payment information to the server
        return fetch('/pay', {
          method: 'POST',
          credentials: 'include',
          headers: {
            'Content-Type': 'application/json'
          },
          body: JSON.stringify(result.toJSON())
        }).then(response => {
          // 4. Display payment results
          if (response.status === 200) {
            // Payment successful
            return result.complete('success');
          } else {
            // Payment failure
            return result.complete('fail');
          }
        }).catch(() => {
          return result.complete('fail');
        });
      });
    }
    
    document.querySelector('#start').addEventListener('click', onBuyClicked);
    

    但是,任何查看页面源代码的人都可以完全看到Javascript中的代码。

    此外,假设我想将成功购买的商品存储到我的服务器上。该帖子将可见。

    这不是安全风险吗?

    有什么方法可以保护它吗?

    1 回复  |  直到 4 年前
        1
  •  1
  •   Charlie    4 年前

    只要JS代码不暴露你应该提供给支付网关的任何凭据,你就安全了。

    所提供的示例是围绕支付请求生态系统构建的,该生态系统是一种收集客户支付凭证的原生浏览器方法。

    如果攻击者要从代码中学习你的支付方式,他所能做的所有黑客攻击都仅限于支付——这很好。

        2
  •  1
  •   Quentin    4 年前

    这不是安全风险吗?

    只有当服务器端代码在没有检查的情况下相信客户端提交的成本时。

    推荐文章