Django(part42)--跨站请求伪造(django解决跨域请求的问题)

网友投稿 254 2022-08-31


Django(part42)--跨站请求伪造(django解决跨域请求的问题)

学习笔记,仅供参考,有错必纠

文章目录

​​中间件Middleware​​

​​跨站请求伪造​​

​​防护方案​​​​举个例子​​

中间件Middleware

跨站请求伪造

跨站请求伪造攻击

某些恶意网站上包含链接、表单按钮或者JavaScript,它们会利用登录过的用户在浏览器中的认证信息,试图在我们的网站上完成某些操作,这就是跨站请求伪造。

CSRF

Cross-Site Request Forgey跨 站点 请求 伪装

CSRF中间件和模板标签提供了对跨站请求伪造的简单防护,它可以防止其它表单提交到我们的Django 服务器中。

防护方案

取消 csrf 验证(不推荐)

删除(注释)settings.py文件中的MIDDLEWARE列表里的 ​​django.middleware.csrf.CsrfViewMiddleware​​ 的中间件。

开放验证

在视图处理函数增加​​@csrf_protect​​装饰器

@csrf_protectdef post_views(request): pass

通过验证(最常用)

在我们的表单中添加一个标签

{% csrf_token %}

举个例子

我们先打开settings.py,并打开CSRF中间件的注释:

MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',# 'mymiddleware.checklogin.MyMiddleWare',# 'mymiddleware.checklogin.VisitLimit',]

它提示我们​​CSRF token​​丢失或不正确。

现在,为了能够成功提交数据,我们需要在提交表单的模板中增加一个标识符:

登陆

{% csrf_token %}
用户名
密码
记住密码

现在,我们再次对登录界面html> 登陆

用户名
密码
记住密码

我们发现​​CSRF token​​标签自动生成了一个input标记:

value参数后的字符串是Django服务器提供给我们的密钥。如果提交的表单中没有带这串密钥,或者提供的密钥和Django给我们的不一致,则不会提交成功,这就起到了防护作用,防止其他网站恶意提交给我们数据。

友情提示

当我们在settings.py中设置了CSRF中间件,并在form表单中增加了​​CSRF token​​标签。那么,如果不是我们服务器发布的表单,而是其他网站发布的表单向我们提交数据,那么将不会提交成功。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java实现Excel转PDF的两种方法详解
下一篇:Django(part41)--中间键Middleware(django 中间表)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~