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

如何规避支付网关CSRF攻击?Razorpay支付处理遭遇CSRF令牌无效问题求助

解决Razorpay支付回调的CSRF验证问题

看起来你遇到了Razorpay回调和CSRF保护冲突的核心问题:你的服务器启用了CSRF校验,要求所有POST请求携带有效的CSRF token,但Razorpay的回调请求是从他们的服务器直接发起的,不会携带你前端页面生成的CSRF token,因此触发了ForbiddenError: invalid csrf token。

下面是具体的解决步骤,兼顾安全性和功能正常:

1. 给回调路由跳过CSRF校验

因为Razorpay的回调是可信的第三方请求,我们可以通过验证Razorpay的签名来确保请求合法性,不需要依赖CSRF token。以Express框架为例,你可以给/is-order-complete路由单独排除CSRF中间件:

const csrf = require('csurf');
const csrfProtection = csrf({ cookie: true });

// 其他需要CSRF保护的路由正常使用中间件
app.post('/submit-form', csrfProtection, (req, res) => {
  // 处理常规表单提交
});

// 给Razorpay回调路由跳过CSRF校验
app.post('/is-order-complete', (req, res) => {
  // 这里处理Razorpay回调逻辑
});

2. 必须验证Razorpay的签名(关键安全步骤)

跳过CSRF校验后,一定要通过Razorpay提供的签名来确认请求确实来自他们的服务器,防止恶意伪造请求。具体实现如下:

const crypto = require('crypto');
const Razorpay = require('razorpay');

// 初始化Razorpay实例(key_secret要保密,不能暴露在前端)
const instance = new Razorpay({
  key_id: '你的Razorpay key_id',
  key_secret: '你的Razorpay key_secret'
});

app.post('/is-order-complete', (req, res) => {
  const { razorpay_order_id, razorpay_payment_id, razorpay_signature } = req.body;

  // 构造签名验证的基础字符串
  const signatureBase = `${razorpay_order_id}|${razorpay_payment_id}`;
  // 用自己的key_secret生成签名
  const generatedSignature = crypto
    .createHmac('sha256', '你的Razorpay key_secret')
    .update(signatureBase)
    .digest('hex');

  // 对比生成的签名和Razorpay发送的签名
  if (generatedSignature === razorpay_signature) {
    // 签名验证通过,继续校验支付状态
    instance.payments.fetch(razorpay_payment_id)
      .then((payment_docs) => {
        // 这里处理支付成功后的业务逻辑,比如更新订单状态
        res.status(200).send('Payment verified successfully');
      })
      .catch((err) => {
        res.status(500).send('Error fetching payment details');
      });
  } else {
    // 签名不匹配,拒绝请求
    res.status(403).send('Invalid request signature');
  }
});

3. 额外注意事项

  • 确保你的order_id是从后端通过Razorpay API生成的,不要在前端随意生成或篡改,Razorpay的订单ID是可信的校验依据。
  • 前端的结账代码不需要修改,Razorpay的Checkout.js会自动处理跳转和回调逻辑,不会受后端CSRF设置的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:07:35