为了账号安全,请及时绑定邮箱和手机立即绑定

使用 django-twilio 包伪造保护正在创建禁止的 403 错误

使用 django-twilio 包伪造保护正在创建禁止的 403 错误

侃侃无极 2022-06-22 17:41:00
我正在使用 django-twilio 包进行防伪保护django-twilio forgery protection docs我有一个 django 短信应用程序,它既可以直接通过我的手机信使发送自动消息,也可以在登录时从我的网站发送。当 DJANGO_TWILIO_FORGERY_PROTECTION = False 时,使用我的 django 短信应用程序的两个平台都可以工作。当 DJANGO_TWILIO_FORGERY_PROTECTION = True 时,只有手机信使工作,网站得到 403 Forbidden。如何在保持尽可能多的安全性并保持相同的应用程序对手机信使和网站正常运行的同时解决此问题。我知道问题与@twilio_view 装饰器有关发送-text.html    <form action="{% url 'text-send' %}" enctype="multipart/form-data" method="POST">    {% csrf_token %}    <input type="text" name="Body" required>    <input type="submit" >    </form>这是我的短信应用程序:@twilio_viewdef sendtext(request, reviewpk):    if request.method == "POST":        ACCOUNT_SID = settings.TWILIO_ACCOUNT_SID        AUTH_TOKEN = settings.TWILIO_AUTH_TOKEN        client = Client(ACCOUNT_SID, AUTH_TOKEN)        message_body = request.POST['Body']        client.messages.create(           to= "+13231342344",           from_="+14571342764",           body=message_body         )        return confirm_things(request)def confirm_things(request):      if 'HTTP_X_TWILIO_SIGNATURE' in request.META:        resp = MessagingResponse()        resp.message("good job message was sent")        return HttpResponse(str(resp), content_type='text/xml')              return HttpResponseRedirect(reverse('dashboard'))  urls.pyurlpatterns = [    path('textsend/', views.sendtext, name='text-send'),    path('dashboard/', views.dash, name='dash'),]
查看完整描述

2 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

Twilio 开发人员布道者在这里。

DJANGO_TWILIO_FORGERY_PROTECTION = True应该只用于来自 Twilio 的 webhook 请求。

您应该使用常规会话(或其他)身份验证以及现有的 CSRF 保护来验证您的用户表单提交。基本上,您不应该使用@twilio_view任何不响应 Twilio 的控制器操作。


查看完整回答
反对 回复 2022-06-22
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

尝试包括 @csrf_exempt 装饰器


导入它 from django.views.decorators.csrf import csrf_exempt


然后在函数中


@csrf_exempt

@twilio_view

def sendtext(request, reviewpk):

    if request.method == "POST":

        ACCOUNT_SID = settings.TWILIO_ACCOUNT_SID

        AUTH_TOKEN = settings.TWILIO_AUTH_TOKEN

        client = Client(ACCOUNT_SID, AUTH_TOKEN)


        message_body = request.POST['Body']

        client.messages.create(

           to= "+13231342344",

           from_="+14571342764",

           body=message_body

         )

        return confirm_things(request)

希望这可以帮助!


查看完整回答
反对 回复 2022-06-22
  • 2 回答
  • 0 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信