csrf

作者: amyhy | 来源:发表于2017-10-14 17:37 被阅读7次

django post出现403的解决办法 据说,从django1.x开始,加入了CSRF保护。

什么是CSRF

CSRF,Cross Site Request Forgery,跨站伪造请求。举例来讲,某个恶意网站上有一个指向你网站的链接,如果某个用户已经登陆上你的网站了,那么当这个用户已经登录上你的网站上了,那么当这个用户点击这个恶意网站上的链接时,就会向你的网站发来一个请求,你的网站会以为这个请求时用户自己发来的,其实呢,这个请求是那个恶意网站伪造的。

Django提供的CSRF防护机制

django第一次相应来自某个客户的请求时,会在服务器端随机生成一个token,把这个token放在cookie里。然后每次POST请求都会带上这个token,这样就能避免CSRF攻击

1. 在返回HTTP相应的cookie里,django会为你添加一个csrftoken字段,其值为一个自动生成的token
2. 在所有的POST表单时,必须包含一个csrfmiddlewaretoken字段(只需要在模板里添加一个tag,django就会自动帮你生成)
3. 在处理POST请求之前,django会验证这个请求的cookie里面的csrftoken字段的值和提交的表单里的csrfmiddlewaretoken字段的值是否是一样,如果一样,则表名这是一个合法的请求,否则,这个请求可能是来自于别人的csrf攻击,返回403Forbidden
4. 在所有ajax POST请求里,添加一个X-CSRFTOKEN header,其值为cookie里的csrftoken的值

Django里如何使用CSRF防护

1. 首先,最基本的原则是:GET请求不要用有副作用,也就是说任何处理GET请求的代码对资源的访问都一点要是“只读的”
2. 要启用django.middleware.csrf.CsrfViewMiddleware这个中间件
3. 再次,在所有的POST表单元素时,需要加上一个{%csrf_token%}这个tag
4. 在渲染模块时,使用RequestContext。RequestContext会处理csrf_token这个tag,从而自动为表单添加一个名为csrfmiddlewaretoken的input

django关闭csrf保护机制

1. 在setting中注释'django.middleware.csrf.CsrfViewMiddleware'这个中间件

2. 在view.py中引入模块
from django.views.decorators.csrf imoport csrf_exempt

在需要关闭csrf保护机制的方法前边用@csrf_exempt装饰器。

相关文章

网友评论

      本文标题:csrf

      本文链接:https://www.haomeiwen.com/subject/mphfuxtx.html