Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用django twilio软件包伪造保护正在创建禁止的403错误_Python_Django_Twilio_Twilio Api_Twilio Programmable Chat - Fatal编程技术网

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

Python 使用django twilio软件包伪造保护正在创建禁止的403错误,python,django,twilio,twilio-api,twilio-programmable-chat,Python,Django,Twilio,Twilio Api,Twilio Programmable Chat,我使用django twilio软件包进行防伪 我有一个django短信应用程序,它既可以通过我的手机messenger直接发送自动消息,也可以在登录时从我的网站发送自动消息。当DJANGO_TWILIO_FORGERY_PROTECTION=False时,使用我的DJANGO短信应用程序的两个平台都可以工作 当DJANGO_TWILIO_FORGERY_PROTECTION=True时,只有手机messenger可以工作,网站被禁止403 如何在维护尽可能多的安全性的同时,使手机messeng

我使用django twilio软件包进行防伪

我有一个django短信应用程序,它既可以通过我的手机messenger直接发送自动消息,也可以在登录时从我的网站发送自动消息。当DJANGO_TWILIO_FORGERY_PROTECTION=False时,使用我的DJANGO短信应用程序的两个平台都可以工作

当DJANGO_TWILIO_FORGERY_PROTECTION=True时,只有手机messenger可以工作,网站被禁止403

如何在维护尽可能多的安全性的同时,使手机messenger和网站的应用程序保持相同的功能。

我知道这个问题和@twilio_视图装饰器有关

send-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>
url.py

urlpatterns = [
    path('textsend/', views.sendtext, name='text-send'),
    path('dashboard/', views.dash, name='dash'),
]

尝试包括@csrf\u豁免装饰器

导入它
来自django.views.decorators.csrf导入csrf\u豁免

然后在函数中

@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)

希望这有帮助

这里是Twilio开发者福音传道者

DJANGO\u TWILIO\u FORGERY\u PROTECTION=True
应仅用于来自TWILIO的Webhook请求


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

这并不能解决问题,@twilio_视图已经在该装饰器中打包了CSRF豁免。为什么
{%CSRF_令牌%}
在表单中存在?这很有意义。在这种情况下,我会将提交的内容从网站分离到不同的应用程序中,并使用标准的django身份验证。如果我通过个人手机发送短信ping twilio号码,这也被认为是来自twilio的webhook吗?如果你向twilio号码发送消息,它会向你指定的URL发出HTTP请求(webhook),所以是的。
@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)