You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Stripe支付页面如何防止用户通过修改HTML或JS代码篡改价格

Stripe支付防止前端篡改价格的解决方案

核心原则永远是:所有前端提交的数据都不可信,核心交易逻辑必须放在服务端处理,你当前的写法风险根源就是把价格计算、金额传递全放在前端,自然很容易被篡改。具体整改方案如下:

  • 移除前端传参中的价格字段
    删掉你代码里id="price"的隐藏输入框,前端做的价格计算仅作为给用户展示的预览用,绝对不要作为结算依据。
  • 服务端维护固定的产品定价映射
    在你的服务端(也就是payment_form.php对应的后端逻辑)里提前存储所有商品的ID和对应定价,比如你示例里的两个商品:
    $product_price_map = [
      'one_article' => 90,
      'another_article' => 75
    ];
    
    绝对不要读取前端传递的价格参数。
  • 服务端自行计算结算金额
    前端提交支付请求时,只需要传递用户勾选的商品ID列表(也就是你当前products字段里的内容),后端收到后先按分隔符拆分出所有商品ID,遍历校验每个ID是否在你预存的$product_price_map里存在,存在的话就取出对应价格累加,得到最终的结算总金额。如果校验发现不存在的商品ID,直接拦截请求返回错误即可。
  • Stripe支付创建逻辑全放在服务端执行
    用后端自己计算出来的总金额调用Stripe接口创建支付意图(Payment Intent),再把对应的支付凭证返回给前端唤起支付流程,整个支付金额的确定完全脱离前端控制,就算用户篡改了前端的商品ID、或者控制台修改JS逻辑,也不会影响最终的结算金额。

额外加固可选方案:如果担心商品ID被暴力遍历,你可以给每个商品ID生成不可预测的签名,前端提交商品ID的同时一并提交签名,后端验签不通过直接拦截,进一步提升安全性。

内容的提问来源于stack exchange,提问作者Álvaro García

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:27:04