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

Flutter集成Stripe:从设备发起HTTPS请求创建支付意图是否安全?

Flutter集成Stripe的客户端安全问题分析

核心结论

直接在Flutter客户端代码中使用Stripe Secret Key并发起请求的方案完全不安全,存在极高的风险,必须立即调整。

具体风险拆解

1. Stripe Secret Key极易泄露

  • Flutter编译后的APK/IPA文件,即使开启了代码混淆,攻击者也可以通过静态反编译、内存dump工具(如Frida)或抓包分析(虽然HTTPS加密,但请求头中的Authorization字段会携带密钥)轻松提取出你的Secret Key。
  • 一旦Secret Key泄露,攻击者可以完全控制你的Stripe账户:创建任意金额的支付意图、发起退款、查询所有交易记录,甚至删除账户数据,造成不可挽回的损失。

2. 支付参数可被随意篡改

  • 客户端的所有参数(包括amount)都处于攻击者可控范围内:
    • 攻击者可以通过修改客户端内存中的变量值,把金额改成极低数值(比如1分钱)后发起支付;
    • 即使通过HTTPS传输,若用户设备被植入恶意CA证书,攻击者可通过中间人攻击篡改请求体中的参数。
  • 客户端侧的金额计算和参数传递完全不可信,无法保证支付金额的真实性。

解决方案:迁移至后端/边缘函数

你考虑迁移到Supabase边缘函数的方向是完全正确的,这是Stripe集成的标准安全流程:

  1. 客户端仅传递必要参数:向你的Supabase边缘函数发送请求,携带订单ID、描述等信息(不要直接传金额,后端从数据库中读取对应订单的真实金额)。
  2. 后端完成Stripe交互:在Supabase边缘函数中,使用Stripe Secret Key调用Stripe API创建Payment Intent,同时严格校验订单金额的合法性(比如确保金额与系统内订单一致,防止恶意参数)。
  3. 客户端用client_secret完成支付:边缘函数将Stripe返回的client_secret传递给客户端,客户端使用Stripe的前端SDK(如flutter_stripe),通过client_secret完成支付流程。

这种方式下,Secret Key完全隐藏在后端,客户端无法接触到;所有金额校验逻辑在后端完成,攻击者无法篡改支付金额,从根源上解决了安全问题。

内容的提问来源于stack exchange,提问作者nilshv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:22:32