Python 使用django twilio软件包伪造保护正在创建禁止的403错误
我使用django twilio软件包进行防伪 我有一个django短信应用程序,它既可以通过我的手机messenger直接发送自动消息,也可以在登录时从我的网站发送自动消息。当DJANGO_TWILIO_FORGERY_PROTECTION=False时,使用我的DJANGO短信应用程序的两个平台都可以工作 当DJANGO_TWILIO_FORGERY_PROTECTION=True时,只有手机messenger可以工作,网站被禁止403 如何在维护尽可能多的安全性的同时,使手机messenger和网站的应用程序保持相同的功能。 我知道这个问题和@twilio_视图装饰器有关 send-text.htmlPython 使用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
<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)