标签: django-csrf

django中的csrf错误

我想实现我的网站登录.我基本上将Django Book中的以下位复制并粘贴在一起.但是,在提交我的注册表单时,我仍然收到错误(CSRF验证失败.请求中止.).有人可以告诉我是什么引发了这个错误以及如何解决它?

这是我的代码:

views.py:

# Create your views here.
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            return HttpResponseRedirect("/books/")
    else:
        form = UserCreationForm()
    return render_to_response("registration/register.html", {
        'form': form,
    })
Run Code Online (Sandbox Code Playgroud)

register.html:

<html>
<body>

{% block title %}Create an account{% endblock %}

{% block content %}
  <h1>Create an account</h1>

  <form action="" method="post">{% csrf_token %}
      {{ form.as_p }}
      <input type="submit" value="Create …
Run Code Online (Sandbox Code Playgroud)

python django csrf django-csrf

15
推荐指数
3
解决办法
2万
查看次数

为不总是有响应的视图禁用Django CSRF

我有一个Django视图,接收不需要CSRF令牌的POST.因此我@csrf_exempt在视图上使用了装饰器.问题是,有时我不会从视图中发出响应(它是一个Twitter机器人,它会收到每个推文的HTTP POST,我不想回复每条推文).当我没有发出响应时,我收到以下错误:

Traceback (most recent call last):

 File "/home/adam/webapps/newman/lib/python2.5/django/core/handlers/base.py", line 100, in get_response
   response = callback(request, *callback_args, **callback_kwargs)

 File "/home/adam/webapps/newman/lib/python2.5/django/views/decorators/csrf.py", line 24, in wrapped_view
   resp.csrf_exempt = True

AttributeError: 'NoneType' object has no attribute 'csrf_exempt'
Run Code Online (Sandbox Code Playgroud)

resp(我假设是响应)是None,因为视图刚刚退出return.如何避免此错误,仍然不需要POST中的CSRF令牌.

谢谢!

python django decorator csrf django-csrf

15
推荐指数
2
解决办法
6588
查看次数

当后端和前端分离时,Django CSRF

在搜索互联网之后,人们通常会处理这种情况---前端是由django视图函数生成的,它可以向用户发送csrf令牌的cookie.当用户使用ajax向服务器发出请求时,人们可以重写将csrf发送到服务器的ajaxSend行为.

但是,我的情况是我的前端完全与后端分离,即我的前端是在运行nginx的专用服务器中,我只有一个html使用hashbang提供所有不同的页面.我的后端使用不同的域名在不同的服务器上运行,在这种情况下,客户端如何获取csrf cookie?我的后端只提供了json api返回.

谢谢.

python django csrf django-csrf

14
推荐指数
2
解决办法
1300
查看次数

Django:如何覆盖CSRF_FAILURE_TEMPLATE

如果csrf检查失败,Django会显示一个403错误的页面.

csrf错误显示错误页面

在我看来,这种错误可能会在常规使用中发生,例如,当用户在其浏览器设置中禁用cookie使用时.

不幸的是,此错误消息对最终用户没有太大帮助,并且具有"django-error"布局(这是一个问题,因为例如缺少站点导航).

Django有一个很好的机制来覆盖模板,但似乎这个模板在代码中是硬编码的.https://github.com/django/django/blob/1.6.8/django/views/csrf.py

有没有办法覆盖此模板,以便向用户提供更友好的消息?

python django django-templates django-csrf

14
推荐指数
2
解决办法
6389
查看次数

Django CSRF令牌不会显示

这是模板中HTML的相关片段:

    <form action="/submit_text/" method="post">
    {% csrf_token %}
    {% include "backbone/form_errors.html" %}
    {{form.as_p}}
    <input type="submit" value="Submit" />
    </form>
Run Code Online (Sandbox Code Playgroud)

这是我的settings.py MIDDLEWARE_CLASSES声明:

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',
)
Run Code Online (Sandbox Code Playgroud)

CSRF令牌根本不显示,导致a

禁止(403)CSRF验证失败.请求中止.

django django-templates django-csrf

13
推荐指数
2
解决办法
6832
查看次数

Django - CSRF令牌丢失或不正确

我刚刚将我的django更新为1.4.但是当我尝试提交登录表单时出现以下错误:

禁止(403)CSRF验证失败.请求中止.失败原因:CSRF令牌丢失或不正确.

在我的settings.py(MIDDLEWARE_CLASSES)中,我不得不删除以下行,因为它现在已弃用:

'django.middleware.csrf.CsrfResponseMiddleware',
Run Code Online (Sandbox Code Playgroud)

而且我开始得到这个错误.

一些必要的信息:Urls.py

url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'registration/login.html'}, name='login')
Run Code Online (Sandbox Code Playgroud)
MIDDLEWARE_CLASSES = (
    'django.middleware.gzip.GZipMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
#   'django.middleware.csrf.CsrfResponseMiddleware',
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
)
Run Code Online (Sandbox Code Playgroud)

的login.html

{% extends "base.html" %}
{% block title %} Login {% endblock %}
{% block content %}



   <div id="text">
        <table>
          <form action="" method="post">
          {% csrf_token %}
            <tr>
                <td><label for="username">Email:</label></td>
                <td><input type="text" name="username" value="" id="username"></td>
            </tr>
            <tr>
                <td><label for="password">Password:</label></td>
                <td><input type="password" name="password" value="" id="password"></td>
            </tr>
            <tr>
                <td><input type="submit" value="Login" />
            {% if next %}
                <input type="hidden" name="next" …
Run Code Online (Sandbox Code Playgroud)

django django-authentication django-csrf

13
推荐指数
1
解决办法
3万
查看次数

POST方法总是返回403 Forbidden

我读过Django - CSRF验证失败,以及与django和POST方法相关的几个问题(和答案).其中一个最好但不能正常工作的答案是/sf/answers/329534761/

所有批准的答案都表明至少有三件事:

  1. 使用RequestContext作为render_to_response_call的第三个参数
  2. 使用POST方法在每个表单中添加{%csrf_token%}
  3. 检查settings.py中的MIDDLEWARE_CLASSES

我完全按照建议做了,但错误仍然出现.我使用django 1.3.1(来自ubuntu 12.04存储库)和python 2.7(默认来自ubuntu)

这是我的观点:

# Create your views here.
from django.template import RequestContext
from django.http import HttpResponse
from django.shortcuts import render_to_response
from models import BookModel

def index(request):
    return HttpResponse('Welcome to the library')

def search_form(request):
    return render_to_response('library/search_form.html')

def search(request):
    if request.method=='POST':
        if 'q' in request.POST:
            q=request.POST['q']
            bookModel = BookModel.objects.filter(title__icontains=q)
            result = {'books' : bookModel,}
            return render_to_response('library/search.html', result, context_instance=RequestContext(request))
        else:
            return search_form(request)
    else:
        return search_form(request)
Run Code Online (Sandbox Code Playgroud)

这是我的模板(search_form.html):

{% extends "base.html" %}
{% …
Run Code Online (Sandbox Code Playgroud)

django post csrf django-csrf

13
推荐指数
4
解决办法
4万
查看次数

Ajax,CSRF和DELETE

我使用文档中getCookie函数来获取值.djangocsrfmiddlewaretoken

我有以下ajax调用:

var url = reverse_removeprofile.replace(/deadbeef/, key);
$.ajax({
    type:          "DELETE",
    url:           url,
    data:          "csrfmiddlewaretoken=" + getCookie("csrftoken"),
    success:       function() { ... },
});
Run Code Online (Sandbox Code Playgroud)

执行此代码后,会django引发403异常,告诉我CSRF验证失败.但是,如果我改变了typeDELETEPOST那么django是高兴的,不抱怨的.

我真的无法在谷歌找到有用的东西,但我发现这张(现已关闭并修复)的门票:https://code.djangoproject.com/ticket/15258

如果我理解正确,那么这个问题已在1.4里程碑中修复.我使用django 1.4但仍无法通过DELETE请求验证CSRF令牌.

我在这里错过了什么吗?

django django-csrf

13
推荐指数
1
解决办法
4367
查看次数

什么是CSRF保护?

我很久以前就听说过CSRF,而我大部分时间都听到的是:

防止CSRF攻击很重要,因为有人不会自动提交表单(使用机器人或其他东西)

嗯,这不是100%的真实,是吗?

我已经做了大约3年的网络抓取,并且提出请求,解析csrftokenmiddleware字段并将其与其他字段一起发布是非常简单的.

那么,它究竟是什么呢?

security django csrf django-csrf

12
推荐指数
2
解决办法
3056
查看次数

django CSRF_TRUSTED_ORIGINS 未按预期工作

我无法理解为什么来自第三方网站的帖子被拒绝,即使该网站已添加到CSRF_TRUSTED_ORIGINSsettings.py 中的列表中。在发布说明 csrf 检查失败的帖子后,我收到了 403 错误。我认为添加该站点CSRF_TRUSTED_ORIGINS应该可以使该站点免受 csrf 检查。为了接收来自外部来源的帖子请求,我还应该做些什么吗?我正在运行 django 3.2

CSRF_TRUSTED_ORIGINS = ['site.lv']
Run Code Online (Sandbox Code Playgroud)

请求标头:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,lv;q=0.8,ru;q=0.7
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 899
Content-Type: application/x-www-form-urlencoded
Host: cvcentrs-staging.herokuapp.com
Origin: https://www.site.lv
Pragma: no-cache
Referer: https://www.site.lv/
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="96", "Microsoft Edge";v="96"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62
Run Code Online (Sandbox Code Playgroud)

python django csrf django-csrf python-3.x

12
推荐指数
2
解决办法
3万
查看次数