python Djanjo csrf说明与配置

 Django csrf django

CSRF 全称(Cross Site Request Forgery)跨站请求伪造。也被称为One Click Attack和Session Riding,一般缩写为CSRF或XSRF。你能够这样理解:攻击者(黑客,钓鱼网站)盗用了你的身份,以你的 名义发送恶意请求,这些请求包括发送邮件、发送信息、盗用帐号、购买商品、银行转帐,从而使你的我的隐私泄露和财产损失。

浏览器

CSRF原理

一、用户登陆并信任网站A
二、验证经过,在用户处产生A的Cookie
三、用户在没有登出网站A的状况下,访问危险网站B
四、网站B要求访问第三站点网站A,发出一个request
五、根据网站B的请求,浏览器带着网站A产生的Cookie访问网站A
六、网站A不知道请求是用户发出的仍是网站B发出的,因为浏览器会自动带上用户Cookie,因此网站A会根据用户的权限处理请求,这样网站B就达到了模拟用户操做的目的安全

从上面步骤中能够看出,要完成一次CSRF攻击,受害者必须依次完成如下两个步骤:服务器

登陆受信任网站A,并在本地生成Cookie
在不登出A的状况下,访问危险网站B
看到这里,你也许会问:若是我不知足以上两个条件中的一个,我就不会受到CSRF攻击。是的,确实如此,可是你不能保证如下状况不会发生cookie

你不能保证你登陆了一个网站以后,再也不打开一个tab页面并访问其余的网站
你不能保证你关闭浏览器以后,你本地的Cookie会马上过时,你上次的会话已经结束
上述中所谓的攻击网站,可能就是一个钓鱼网站

session

CSRF攻击实例
听了这么多,可能你们还云里雾里,光听概念可能你们对于CSRF仍是不够了解,下面我将举一个例子来让你们对CSRF有一个更深层次的理解。网站

咱们先假设支付宝存在CSRF漏洞,个人支付宝帐号是wl,攻击者的支付宝帐户是xxx,而后咱们经过网页请求的方式 http://zhifubao.com/withdraw?account=lyq&amount=10000&for=wl 能够把帐号的wl的10000元转到个人另一个 帐户wl上面去。一般这个状况下,该请求发送到支付宝服务器后,服务器会先验证请求是否来自一个合法的session,而且该session的用户已经成功登陆。攻击者在支付宝也有帐户xxx,他直到上文中的URL能够进行转帐操做,因而他本身能够发送一个请求 http://zhifubao.com/withdraw?account=lyq&amount=10000&for=xxx 到支付宝后台。可是这个请求是来自攻击者而不是我wl,因此不能经过安全认证,所以该请求做废。这时,攻击者xxx想到了用CSRF的方式,他本身作了个网站,在网站中放了以下代码:http://zhifubao.com/withdraw?account=lyq&amount=10000&for=xxx ,而且经过网站连接诱使我来访问他的网站。当我禁不住诱惑时就会点了进去,上述请求就会从我本身的浏览器发送到支付宝,并且这个请求会附带个人浏览器中的cookie。大多数状况下,该请求会失败,由于支付宝要求个人认证信息,可是我若是刚访问支付宝不久,尚未关闭支付宝页面,个人浏览器中的cookie存有个人认证信息,这个请求就会获得响应,从个人帐户中转10000元到xxx帐户里,而我丝绝不知情。

spa

进入settings.py找到  MIDDLEWARE  这个列表找到    'django.middleware.csrf.CsrfViewMiddleware',  这个字段orm

这一行设置csrf的若是把它注释掉csrf将失效csrf

 

如今我在django写了一个HTML表单当我点击提交的时候会变为提交方式会变为POST而后就会发现报了一个  403 的csrf错误

这是由于django的防御功能    因没有提供Referer值而被误认为CSRF攻击,拒绝访问 怎么解决这个问题呢?

 

 

能够在form表单下面加上    {%csrf_token%}     当你检查的时候就会发现多了一个input数据 这是  {%csrf_token%}  自动转化的数据提供浏览器进行确认

若是成功就能够正常访问错误则拒绝访问

而后你就会发现跳转页面的时候访问成功了

 

相关文章
相关标签/搜索