web表单下设置CSRF标签可以有效防止CSRF跨站攻击(如下图)
{% csrf_token %}
如果不设置该表单,那么在访问web页面时会禁止访问(如下图)
应对禁止访问,其实也有很多办法,其中一个办法就是将配置文件(settings.py)中的csrf的中间件儿拿掉,这样原来禁止访问的页面也可以成功访问,但这种做法风险是非常大的,出于安全考虑,不推荐这样做
另一种办法是在视图层加一个装饰器(@csrf_exempt),实现局部不检测,换句话说,就是即使不在web表单中添加csrf标签,只要加了装饰器,也能成功访问页面,需要注意的是仅限加了装饰器的内容,其他不加装饰器的代码还是禁止访问的状态
接着我们就着上面说的内容用代码演示一遍:
首先,在app下的urls.py文件下配置一个子路由
from django.urls import path, re_path from App import views urlpatterns = [ # csrf测试 path('register/',views.register,name = 'register'), ]
接着,编写视图函数
def register(request): if request.method == "POST": # 如果该请求为POST请求 username = request.POST.get('username') # 获取表单中的username password = request.POST.get('password') # 获取表单中的password print(username,password) # 打印username,password return render(request,'register.html') # 渲染模版,返回给web register.html中的内容
web表单(未设置csrf标签)
注册
此时开启服务(python manage.py runserver 8090)后,访问web页面,会显示禁止访问的字样
那么接下来我们在web表单中设置csrf标签
{% csrf_token %}
注册
再来访问web页面,发现用户名,密码可以正常提交,且表单中会多一个csrf隐式伪随机数
CSRF攻击是源于WEB的隐式身份验证机制!WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的!
CSRF防御机制思路是在客户端页面增加伪随机数即可实现比较有效的跨站攻击防御
ajax提交,需要在html中添加以下内容
🌈1 引用jquery
🌈2 添加防止跨站攻击标签
🌈3 添加ajax提交用button
🌈4 添加ajax
注册 {# 🌈1 引用jquery #}在html中继续添加以下内容
🌈5 post提交
注册 {# 🌈1 引用jquery #}总结
到此这篇关于Python djanjo之csrf防跨站攻击的文章就介绍到这了,更多相关djanjo csrf防跨站攻击内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
如何解决《使用Ramda/LoDash/Underscore在嵌套属性上进行独特分组和计数》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Java流.orElseThrow》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Tensorflow中的同步与异步计算》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Jenkinspowershell插件总是成功构建》经验,为你挑选了2个好方法。 ... [详细] 如何解决《RxJava和Retrofit2:NetworkOnMainThreadException》经验,为你挑选了2个好方法。 ... [详细] 如何解决《如何使用php从mysql数据库访问特定值?》经验,为你挑选了0个好方法。 ... [详细] 如何解决《'x<<~y'在JavaScript中代表什么?》经验,为你挑选了5个好方法。 ... [详细] 如何解决《gulplocal和CLI版本不匹配》经验,为你挑选了1个好方法。 ... [详细] 如何解决《在不使用jQuery的情况下将表转换为JavaScript中的数组》经验,为你挑选了1个好方法。 ... [详细] 如何解决《重载C++new运算符时的大小信息》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Java接口:根据对象类型调用实现类》经验,为你挑选了1个好方法。 ... [详细] 如何解决《python如何在列表中返回第一个value=true?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《非控制器类的ActionResult》经验,为你挑选了0个好方法。 ... [详细] 如何解决《Jquery-双击时遇到麻烦,因为课堂上有变化》经验,为你挑选了0个好方法。 ... [详细] 如何解决《使用WooCommerce产品搜索搜索特定的post_type表单post_type列时出错》经验,为你挑选了0个好方法。 ... [详细] 如何解决《C++:洛伦兹因子方程》经验,为你挑选了1个好方法。 ... [详细] 如何解决《D3.js折线图工具提示问题》经验,为你挑选了1个好方法。 ... [详细] 如何解决《SynchronizationContext.Post的处理顺序》经验,为你挑选了0个好方法。 ... [详细] 如何解决《从服务器收听iCal事件更改》经验,为你挑选了1个好方法。 ... [详细] 如何解决《关于更新当前时间戳的Mysql5.6列在hibernate中不起作用》经验,为你挑选了1个好方法。 ... [详细]吐了个 "CAO" !Tags | 热门标签RankList | 热门文章
- 1401在访问资源时未经授权以编程方式创建azure应用程序
- 2ReSharper自定义模式与多个成员定义不明确
- 3批量分配问题
- 4添加Controller时SpringDataRest @RepositoryEventHandler未运行
- 5如何使用Visual Studio的Node Tools调试Gulp任务?
- 6Flask/uWSGI抛出错误无法加载app 0(mountpoint ='')
- 7令人困惑的考试复习说明,java
- 8解构深层属性
- 9您如何访问已传递给CompletableFuture allOf的已完成期货?
- 10AdMob:使用测试横幅广告无法从任何Mediaton广告网络中填充广告
- 11新的React Native项目与旧版本的本机反应
- 12使用重置初始化unique_ptr是一个坏习惯吗?
- 13EntityFramework 6.1.3不支持visual studio 2015上的框架.NETPlatform,Version = v5.4
- 14使用CSS从焦点选项卡中删除发光边框
- 15使用IIf语法错误
- 16结合ggplot2和d3(gridSVG教程导致非交互式图像)
- 17Python Selenium发送密钥给出关于大小的警告
- 18平均行长超出可能
- 19减少潜在的空RDD
- 20如何将MDL按钮样式应用于filePicker?
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有