【问题标题】:django CSRF validationdjango CSRF 验证
【发布时间】:2011-09-28 17:08:57
【问题描述】:

我无法绕过 CSRF 令牌验证 403 错误。 这是我所拥有的:

查看:

from django.template import RequestContext
def add(request, name):
#logic
return render_to_response("category/add.html", {"form": form}, 
    context_instance = RequestContext(request))    

模板:

<form action="/category/add/" method="post">
    {% csrf_token %}
    New Category: <input type="text" name="name" id="categoryname" />
    <input type="submit" value="Hinzufuegen" />
</form>

设置:

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',
)

【问题讨论】:

    标签: django csrf django-csrf


    【解决方案1】:

    您是否将 POST 数据传递给表单进行验证?你必须这样做:

         from django.template import RequestContext
         def add(request, name):
           # Logic
           if request.type == "POST":
             form = YourFormClass(request.POST)
             if form.is_valid():
                 # Success!
             else:
                 # Invalid form
           else:
             return render_to_response("category/add.html", {"form": form}, 
             context_instance = RequestContext(request))
    

    【讨论】:

      【解决方案2】:

      好像需要添加

      'django.middleware.csrf.CsrfViewMiddleware',
      'django.middleware.csrf.CsrfResponseMiddleware',
      

      到您的 MIDDLEWARE_CLASSES。似乎它没有验证 CSRF 令牌,只是生成...... 帮我my case...

      【讨论】:

      • 不推荐使用 CsrfResponseMiddleware,因为它会影响性能,并且存在潜在的安全问题(见下文)。在更新应用程序以使用 csrf_token 标记之前,它可以用作临时措施。它已被弃用,将在 Django 1.4 中删除。 docs.djangoproject.com/en/1.3/ref/contrib/csrf/#legacy-method
      猜你喜欢
      • 2016-03-03
      • 2012-09-08
      • 2015-06-02
      • 1970-01-01
      • 2018-09-15
      • 2017-03-29
      相关资源
      最近更新 更多