django 禁用csrf处理csrf应该添加什么?

拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3aaf920ea44243f5-ua98).
重新安装浏览器,或使用别的浏览器1066人阅读
django(45)
原文出处:/momoxiao/archive//157443.aspx?opt=admin&
在settings里注释掉中间件这一行,可以暂时屏蔽csrf验证,但是这样不安全了.
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'monMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
1 在 templete 中, 为每个 POST form 增加一个 {% csrf_token %} tag. 如下:&
&&& {% csrf_token %}&
2 在 view 中, 使用 django.template.RequestContext 而不是 Context.&
render_to_response, 默认使用 Context. 需要改成 RequestContext.&
导入 class:&
from django.template import RequestContext&
给 render_to_response 增加一个参数:&
def your_view(request):&
&&& return render_to_response('template.html',&
&&&&&&&&& your_key_value,&
&&&&&&&&& context_instance=RequestContext(request)&
&&&&&&&&& )&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:91581次
积分:1481
积分:1481
排名:千里之外
原创:41篇
转载:117篇
(1)(4)(1)(1)(3)(1)(1)(1)(1)(2)(1)(13)(8)(4)(18)(24)(8)(15)(25)(3)(17)(6)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'django csrf防护原理
我的图书馆
django csrf防护原理
通过Django的CSRF中间件,开发人员很轻松就能够为自己的系统提供CSRF防护的能力。关于CSRF的介绍可以看几篇不错的文章,),, 。关于django如何使用CSRF中间件可以看,写的也很清楚,这篇文章会介绍一下django实现CSRF防护的细节。
CSRF的防护通常有两种方式,一个是通过Challenge-Response的方式,例如通过Captcha和重新输入密码等方式来验证请求是否伪造,但这会影响用户体验,类似银行付款会采用这样的方式。另一种是通过随机Token的方式,多数Web系统都会采用这种方式,Django也是用的这种。下面具体描述Django的实现步骤,大多数基于Token的CSRF防护系统都是类似的流程。
如果有form在提交时需要验证token,那么django在打开这个页面时就会在用户的cookie中插入csrftoken记录,csrftoken的生成方式:hashlib.md5("%s%s"% (randrange(0, L),
settings.SECRET_KEY)).hexdigest()
原本我以为Django的Token值是通过sessionid 加一个salt值计算得来的,但是看了django的源码发现并非如此,而是通过一个随机数加salt的方式。好像django 1.1之前也是用的sessionid进行hash,不清楚为什么在django 1.2之后改用随机数的方式。另外这个csrftoken写入cookie的有效期会非常的长response.set_cookie(settings.CSRF_COOKIE_NAME,
request.META["CSRF_COOKIE"], max_age = 60 * 60 * 24 * 7 * 52,
domain=settings.CSRF_COOKIE_DOMAIN)
通过代码看来,这个cookie的有效期有52周,并不会随着session的销毁而注销或变化。
form提交时,会通过隐藏表单的方式提交cookie中的csrftoken记录
服务器端接到POST请求时,会验证提交的Token和用户cookie中的Token值是否一致,如不一致就返回403错误。
有一点需要注意的,如果使用的是django.middleware.csrf.CsrfViewMiddleware这个中间件,django会默认验证每一个post请求,因此所有的表单内都需要加上csrf_token的tag,否则站内提交也会被阻止,除非通过@csrf_exempt装饰器来显示声明不验证token值。
TA的最新馆藏
喜欢该文的人也喜欢}

我要回帖

更多关于 django post csrf 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信