博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Forbidden (403) CSRF verification failed. Request aborted.
阅读量:6370 次
发布时间:2019-06-23

本文共 2577 字,大约阅读时间需要 8 分钟。

The CSRF middleware and template tag provides easy-to-use protection against Cross Site Request Forgeries. 跨站请求伪造,django 1.4 默认配置了’django.middleware.csrf.CsrfViewMiddleware’,

MIDDLEWARE_CLASSES
=
(
    
'django.middleware.common.CommonMiddleware'
,
    
'django.contrib.sessions.middleware.SessionMiddleware'
,
   #
'django.middleware.csrf.CsrfViewMiddleware'
,#注释掉就正常刘
    
'django.contrib.auth.middleware.AuthenticationMiddleware'
,
    
'django.contrib.messages.middleware.MessageMiddleware'
,
)

 只需要在每个form标签里面加上{% csrf_token %}即可:

{% csrf_token %}

当然,仅仅这个还不够,还需要:

from django.core.context_processors import csrffrom django.shortcuts import render_to_responsedef my_view(request):    c = {}    c.update(csrf(request))    # ... view code here    return render_to_response("a_template.html", c) 但是如果在1.4版本中加入的话又会出现以下问题:
Traceback (most recent call last):  File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run    self.result = application(self.environ, self.start_response)  File "/usr/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 67, in __call__    return self.application(environ, start_response)  File "/usr/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 219, in __call__    self.load_middleware()  File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 51, in load_middleware    raise exceptions.ImproperlyConfigured('Middleware module "%s" does not define a "%s" class' % (mw_module, mw_classname))ImproperlyConfigured: Middleware module "django.middleware.csrf" does not define a "CsrfResponseMiddleware" classValidating models...

找不到CsrfResponseMiddleware 这个类:

官方文档是这么说的:

Use of the CsrfResponseMiddleware is not recommended because of the performance hit it imposes, and because of a potential security problem (see below). It can be used as an interim measure until applications have been updated to use the csrf_token tag. It is deprecated and will be removed in Django 1.4.

所以上边第二个新加入的东西要删掉,在template文件中的form中加入tag {% csrf_token %} 如下:

{
% csrf_token %} <--------------------------------------新加入的

Subject:

Your e-mail: (optional):

Message:

加上了之后我运行还是不行:还需要最后一步:在view文件中加入装饰器@csrf_exempt如下:

from django.views.decorators.csrf import csrf_exempt

@csrf_exemptdef contact(request):

问题终于解决掉!!!

因为django之所以引进CSRF是为了避免攻击,而上面的解决方法恰好禁止掉这个django的功能。所以日后还得仔细研究下,在不禁掉这个功能的前提下成功的提交表单。

转载于:https://www.cnblogs.com/gongchang/archive/2013/01/10/2855391.html

你可能感兴趣的文章
【后台任务】与UI线程通信(7)
查看>>
【Camera】相机概要(1)
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
视频应用方向的发展猜想
查看>>
GP数据库笔记--数据类型转换,杀掉进程的方法
查看>>
centos 文件扩展swap
查看>>
Leetcode#36Valid Sudoku
查看>>
军规3 关注多任务和意外情况处理
查看>>
分享:云上的日子——“0”费用消费全球最快手机传输工具
查看>>
Winform 不同窗体间方法调用总结
查看>>
新云东方Power System服务器首亮相 可信高端计算系统产业链雏形初具
查看>>
centos下搭建docker私有仓库
查看>>
静态路由配置过程
查看>>
软件开发模式对比(瀑布、迭代、螺旋、敏捷)
查看>>
windows域控制器恢复
查看>>
awk多分隔符
查看>>
start to use spirent
查看>>
搭建linux ris服务器批量在dell服务器上安装windows 2003
查看>>
无锡云计算大胆借鉴苹果模式 应用落地指日可待(转)
查看>>