标签: django-csrf

带有jquery的CSRF和django 1.3中的$ .post

在django 1.3中,你现在必须使用csrf甚至是ajax.我使用jquery,现在我想将csrf标记添加到$ .post.我怎样才能做到这一点?我对jquery不是很熟练,所以对于一个很好的描述会很好.

这是一个评级应用程序,点击星标时发送帖子.我见过django文档,但不明白在我的情况下该怎么做.我的代码如下:

$(function() {  
            $("#avg").children().not(":input").hide();
            $("#rating-widget").children().not("select").hide();    

            $caption = $("<span/>");

            $("#avg").stars({captionEl: $caption});
            $("#rating-widget").stars({
                inputType: "select",
                cancelShow: false,
                captionEl: $caption,
                callback: function(ui, type, value){
-------------->     $.post($("#rating-widget").attr("action"), {score: value}, function(data){

                    });
                }
            });
               $caption.appendTo("#rating-widget");

});
Run Code Online (Sandbox Code Playgroud)

应该说javascript不在模板中,而是在静态文件中.最好将它放在模板中,以便我可以使用{{ csrf_token }}

提前致谢!

django jquery django-csrf

6
推荐指数
1
解决办法
7364
查看次数

Django中的Ajax调用失败

我有以下ajax调用来更新模型的特定字段

$("#updateLink").click(function(){
    var dec_text = $('#desc_text').val();

    $.ajax({
        type: "POST",
        url:"/users/update_desc/",
        data: {
        'val': dec_text,
        },
        success: function(){
            $(".display, .edit").toggle();
            $("#descText").html(dec_text);
        },
        error: function(){
            alert("Error");
        },
    });
    return false;
});
Run Code Online (Sandbox Code Playgroud)

我的观点是这样的

@csrf_exempt
def update_desc(request):
    if request.is_ajax():
        if request.method == 'POST':
            desc_text = request.POST.get('val', False)
            if desc_text:
                profile = user.profile
                profile.desc = desc_text
                profile.save()

            return_message = "Sent mail"
            return HttpResponse(return_message,mimetype='application/javascript')
Run Code Online (Sandbox Code Playgroud)

我不断收到错误消息,我不知道如何解决这个问题.我甚至使用csrf_exempt装饰器来解决问题,如果问题是由于缺失引起的,csrf token但问题仍然存在.

除了ajax post在我的base模板中所有ajax调用都失败的情况.任何人都可以帮助了解这里发生的事情.如果需要,我可以提供更多细节.

编辑:

我在我的基本模板中添加了一个js包含此https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax的文件,因此这意味着它存在于我的所有模板中.我正在使用django 1.3版本.

django ajax jquery django-csrf csrf-protection

6
推荐指数
1
解决办法
663
查看次数

Django管理员提出CSRF验证失败

我已经启动了新的django项目并启用了管理员应用程序.我可以登录管理站点,但是当我尝试添加/更改站点或用户时,我正在获取

CSRF verification failed. Request aborted.
Reason given for failure:
CSRF token missing or incorrect.
Run Code Online (Sandbox Code Playgroud)

这就是我在settings.py中所拥有的:

TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)

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',
# Uncomment the next line for simple clickjacking protection:
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
)
Run Code Online (Sandbox Code Playgroud)

当我查看管理页面来源时,我看到了

<input type='hidden' name='csrfmiddlewaretoken' value='T9Mfk1LRXi5jPE2dh5jcvdKwzYM6Iy5I' />
Run Code Online (Sandbox Code Playgroud)

那里

我有Django版本1.4.1

python django csrf django-csrf

6
推荐指数
1
解决办法
6716
查看次数

如何将Django的CSRF令牌添加到jQuery POST请求的标头中?

我正在尝试使用动态填充的字段创建Django表单:也就是说,当checkin_type从下拉菜单中选择一个字段()时,其他字段会自动填充相应的数据。为此,一旦选择了下拉选项,我想向服务器发送POST请求。

到目前为止,我已经尝试了以下模板(遵循https://docs.djangoproject.com/en/2.0/ref/csrf/):

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
<script>
    $(document).ready(function(){
        var csrftoken = Cookies.get('csrftoken');

        $(".auto-submit").change(function() {
            $.post({
                url: "{% url 'get-checkin-type' %}",
                data: $(".auto-submit option:selected").val(),
                headers: {
                    X-CSRFToken: csrftoken
                }
            })
        });
    });
</script>


<form action="" method="post">{% csrf_token %}
    {% for field in form %}
        <div class="{% if field.name == 'checkin_type' %}auto-submit{% endif %}">
            {{ field.errors }}
            {{ field.label_tag }}
            {{ field }}
        </div>
    {% endfor %}
    <input type="submit" value="Send message" />
</form>
Run Code Online (Sandbox Code Playgroud)

但是,当我选择一个下拉选项时,

新增:17个未捕获的SyntaxError:意外令牌-

从该X-CSRFToken: csrftoken …

javascript django jquery django-csrf

6
推荐指数
1
解决办法
1876
查看次数

从 Vue.js 向 Django 发送 POST/DELETE 请求时禁止(未设置 CSRF cookie。)

一段时间以来,我一直在尝试从 Vue 前端向 Django 后端发送 POST 或 DELETE 请求。

我在 localhost:3000 上运行 Vue.js,在 localhost:8000 上运行 Django。我已经使用django-cors-headers设置了 CORS ,并且能够获取请求。但是,一旦我尝试删除或发布,就会收到此错误:

Forbidden (CSRF cookie not set.)

据我了解,我需要在请求标头中传递 CSRF 令牌,我有:

    deleteImage() {
      const url = this.serverURL + 'images/delete/' + this.image_data.pk;

      const options = {
        method: "DELETE",
        headers: {'X-CSRFToken': this.CSRFtoken}
      };
      fetch(url, options)
        .then(response => {
          console.log(response);
          if (response.ok){ 
            // if response is successful, do something
          }
        })
        .catch(error => console.error(error));
    }
Run Code Online (Sandbox Code Playgroud)

我从 GET 请求获取,如果我使用Django 文档this.CSRFtoken 中显示的方法,令牌是相同的。

我的姜戈settings.py看起来像这样:

rom …
Run Code Online (Sandbox Code Playgroud)

django django-csrf vue.js django-cors-headers csrf-token

6
推荐指数
1
解决办法
7930
查看次数

零散的403"CSRF FAILURECSRF cookie未设置"与django的错误

我们有一个刚刚开始暴露于外部世界的小网站.在大多数情况下,它工作得很好,但我们偶尔会从其中一个表单中收到403错误消息"CSRF FAILURECSRF cookie not set".表单肯定{% csrf_token %}包含,我们的中间件看起来像这样:

MIDDLEWARE_CLASSES = (
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)
Run Code Online (Sandbox Code Playgroud)

该表单适用于大多数人,但大约每天一次我收到一封故障案例的电子邮件.电子邮件包含实际请求,看起来像这样(我删除了其余的POST数据以隐藏私人数据,但留下了csrfmiddlewaretoken):

<WSGIRequest
path:/main/10/apply/,
GET:<QueryDict: {}>,
POST:<QueryDict: {u'csrfmiddlewaretoken': [u'IQQZvbVIggJm6Be6VinPHj8Qn3i3TdmG']}>,
COOKIES:{},
META:{'CONTENT_LENGTH': '111978',
 'CONTENT_TYPE': 'multipart/form-data; boundary=----WebKitFormBoundaryLyo9BPXnAwKnt8ew',
 'CSRF_COOKIE': 'XmSPWJZk2UwS4PNBXRmVlAaYDDdNaGqk',
Run Code Online (Sandbox Code Playgroud)

CSRF_COOKIE与csrfmiddlewaretoken不匹配,这是我假设导致问题的原因,但我无法弄清楚这些是如何与某些提交不同步而不是其他提交.该页面是一个非常简单的表单,只有几个字段.

我应该看哪里的建议?我正在使用mod_wsgi通过apache在CentOS上运行最新的Django 1.4.1.

编辑:与成功的请求相比,唯一看起来奇怪的事情是这里的COOKIES:{}部分是空的,这会让我怀疑他们可能只是在他们的浏览器中禁用了cookie,但是为什么它会出现在CSRF_COOKIE中META部分?

谢谢你的帮助!

布兰登

django django-csrf http-status-code-403 django-1.4

5
推荐指数
1
解决办法
1833
查看次数

如果包含两种形式会影响我的CSRF令牌使用?

我正在尝试创建一个包含两个表单的页面:一个在页面加载时可见(一个登录表单),另一个在用户单击按钮(注册表单)时出现在模态中.

我正在使用Django,虽然我仍然在弄清楚如何处理这些表单,但我最关心的是CSRF令牌将如何发挥作用.例如,我应该{% csrf_token %}只使用其中一个<form></form>标签,还是应该将它放在两个标签中?

此外,如果我在两种形式中都使用它,这会以任何方式影响我对服务器的POSTS吗?目前,我正在以一种形式获取数据(取决于单击的提交按钮)并以这种方式进行POST:

var data={
    'username':$('#username').val(), 
    'password':$('#password').val(),
    'csrfmiddlewaretoken': '{{ csrf_token }}'
}

$.post("/", signin_data);
Run Code Online (Sandbox Code Playgroud)

django post django-csrf

5
推荐指数
1
解决办法
2860
查看次数

如何从Django中检索/提供CSRF令牌作为API

我正在开发一个使用Django REST框架作为后端的项目(让我们说api.somecompany.com但是有一个React.js前端(at www.somecompany.com)不是由Django提供的,它提出了AJAX请求.

因此,我不能使用Django的传统方法让模板包含这样的CSRF令牌 <form action="." method="post">{% csrf_token %}

我可以向Django REST Framework的api-auth\login\url 发出请求,它会返回这个标题: Set-Cookie:csrftoken=tjQfRZXWW4GtnWfe5fhTYor7uWnAYqhz; expires=Mon, 01-Aug-2016 16:32:10 GMT; Max-Age=31449600; Path=/- 但是我无法检索这个cookie以发回我的AJAX请求X-CSRFToken(我的理解是单独的子域),它不会似乎被自动包括在内.

这是我的相关代码:

// using jQuery
function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie != '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + …
Run Code Online (Sandbox Code Playgroud)

django ajax jquery django-csrf reactjs

5
推荐指数
1
解决办法
1655
查看次数

Django - 自定义403模板

我正在尝试在Django 1.5中使用我的403,404,500个自定义模板.404和500完美地工作,但403仍然显示我内置的Django 403模板.

我将所有三个模板放在项目的根模板目录中.它们的名称为:403.html,404.html,500.html

我也试过用:

urls.py:

 from django.utils.functional import curry
 handler403 = curry(permission_denied, template_name='403.html')
Run Code Online (Sandbox Code Playgroud)

还有:urls.py:

handler403 = 'proj_name.views.my_custom_permission_denied_view'
Run Code Online (Sandbox Code Playgroud)

PROJ_NAME/views.py

def my_custom_permission_denied_view(request):
    return ethoos_response('403.html', None, request)
Run Code Online (Sandbox Code Playgroud)

两种方法都不起作用.同样在404和500中,我不使用这些方法,只使用模板目录中的模板,并显示它们.

根据Django的文档,这三个假设都以相同的方式工作. https://docs.djangoproject.com/en/1.5/topics/http/views/#the-403-http-forbidden-view

我不知道为什么只有403没有.谢谢.

python django templates django-csrf http-status-code-403

5
推荐指数
1
解决办法
8763
查看次数

CSRF令牌丢失或不正确.Django + AngularJS

从localhost机器向远程django api发出POST请求时,我收到CSRF令牌丢失或错误.

我在AngularJS上的设置:

.config(['$httpProvider', function($httpProvider){

$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';

}]);
Run Code Online (Sandbox Code Playgroud)

但我仍然得到CSRF令牌丢失或不正确的错误.

我检查发送的标题是什么,显然有角度没有发送HTTP_X_CSRFTOKEN.

但我可以看到cookie csrftoken =发送的东西.

有谁知道发生了什么?

请求标题

POST /s/login/ HTTP/1.1
Host: server.somewhere.io:8000
Connection: keep-alive
Content-Length: 290
Pragma: no-cache
Cache-Control: no-cache
Accept: application/json, text/plain, */*
Origin: http://localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36
Content-Type: application/json;charset=UTF-8
Referer: http://localhost/thesocialmarkt/
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en;q=0.8,en-US;q=0.6,pt-BR;q=0.4,pt;q=0.2
Cookie: csrftoken=hiYq1bCNux1mTeQuI4eNgi97qir8pivi; sessionid=1nn1phjab5yd71yfu5k8ghdch2ho6exc
Run Code Online (Sandbox Code Playgroud)

api django csrf django-csrf angularjs

5
推荐指数
1
解决办法
1437
查看次数