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

Twilio处理入站SMS触发Django 403 CSRF校验失败如何解决?

问题原因

这个403错误是Django默认启用的CSRF防护机制拦截了Twilio的请求导致的。第三方服务发起的webhook回调请求既不会携带你站点的CSRF令牌,也不会携带符合要求的Referer请求头,因此会被Django的CSRF中间件直接拦截。

解决方案

不要关闭全站的CSRF中间件(会导致整个站点出现CSRF安全风险),仅对Twilio回调的专属视图进行CSRF豁免即可,操作方法如下:

  • 首先导入CSRF豁免装饰器:
from django.views.decorators.csrf import csrf_exempt
  • 如果是函数视图,直接给对应处理Twilio回调的视图加装饰器:
@csrf_exempt
def twilio_sms_webhook(request):
    # 你的业务逻辑
    ...
  • 如果是类视图,需要在路由配置中添加豁免:
from django.urls import path
from .views import TwilioSmsWebhookView

urlpatterns = [
    path('sms/webhook/', csrf_exempt(TwilioSmsWebhookView.as_view()), name='twilio_sms_webhook'),
]

补充安全建议

豁免CSRF后建议增加Twilio请求签名校验,确保请求确实来自Twilio而非恶意第三方:Twilio发起请求时会携带X-Twilio-Signature请求头,你可以使用Twilio官方SDK对该签名进行校验,校验通过后再执行业务逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:24:07