标签: django-csrf

如何使用 Axios 将 CSRF Coo​​kie 从 React 发送到 Django Rest Framework

我想从使用AxiosReact应用程序向Django Rest Framework后端发出POST请求。我设法从后端获取了CSRF 令牌,但我无法通过我的请求发送它,所以我总是收到错误消息:Forbidden (CSRF cookie not set.)

这是我的React应用程序的代码:

handleClick() {
    const axios = require('axios');
    var csrfCookie = Cookies.get('XSRF-TOKEN');
    console.log(csrfCookie)
    axios.post('http://127.0.0.1:8000/es/api-auth/login/',
      {
        next: '/',
        username: 'admin@admin.com',
        password: 'Cancun10!',
      },
      {
        headers: {
          'x-xsrf-token': csrfCookie,  // <------- Is this the right way to send the cookie?
        },
        withCredentials = true,
      }
    )
    .then(function (response) {
      console.log(response);
    })
    .catch(function (error) {
      console.log(error);
    })
  }
Run Code Online (Sandbox Code Playgroud)

这是我的settings.pyCSRF 配置:

CORS_ALLOW_CREDENTIALS …
Run Code Online (Sandbox Code Playgroud)

csrf django-csrf django-rest-framework reactjs axios

4
推荐指数
2
解决办法
7448
查看次数

我如何验证iPhone应用程序并向Django后端发出请求以绕过CSRF?

我和一个没有任何Django经验的iPhone开发人员合作,而且我对Django来说比较新.我已经构建了一个带有Web界面的现有Django应用程序,允许用户登录并将我们数据库中的书籍添加到他的个人库中.

我们正在尝试构建一个允许用户进行身份验证和访问库的iPhone应用程序,我想知道进行身份验证的最佳方法是什么,然后请求用户的库.我们开始使用HTTP POST请求将凭据发送到Django应用程序,但我知道的另一个Django开发人员告诉我这将是一个跨域请求,从Django 1.2开始无法工作.

如果我无法进行跨域HTTP POST请求,我应该如何将数据从iPhone应用程序发布到Django应用程序?

iphone authentication django post django-csrf

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

iPhone发布到Django并获得CSRF验证失败

我从iPhone发送POST请求到Django并获得"CSRF验证失败",我无法完全理解.我试图通过互联网找到一个很好的解决方案,但我不能.是否有任何简单的方法来发送到Django?

这是我的代码:

   NSString *post =[NSString stringWithFormat:@"s=aaa&r=k&c=gg"];
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:(@"http://localhost:8000/messages/views/")]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(data);
Run Code Online (Sandbox Code Playgroud)

iphone django post django-csrf

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

使用外部POST请求绕过Django CSRF保护

我有一个Python程序,需要能够将数据发送到我的网站(使用Django构建).然后,这些数据将被拍摄并显示在网站的某个部分.我遇到的问题是Django内置的CSRF保护阻止了我的POST请求.根据我的理解,通常可以通过将{%csrf_token}添加到POST请求发送到的任何形式来避免这种情况.我的问题是我正在尝试将POST请求发送到.cgi脚本而不是表单.有没有人知道如何绕过CSRF保护(最好不要完全删除它,尽管这是一个选项.)

python django csrf http-post django-csrf

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

为什么Django的CSRF不能通过HTTPS工作?

我在http://example.com上有一个Django网站,工作正常,包括帖子请求.我添加了HTTPS,因此我的网站也可以通过https://example.com访问.

我可以在HTTPS上加载任何页面,但是当我尝试POST时,我总是遇到CSRF验证错误.POST请求在HTTP上正常工作.

我的Django进程在nginx后面运行gunicorn,我有nginx设置X_Forwarded_For.因此,HTTPS请求具有以下标头(取自request.META):

'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'HTTP_ACCEPT_ENCODING': 'gzip, deflate',
'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.5',
'HTTP_CONNECTION': 'close',
'HTTP_COOKIE': 'redacted',
'HTTP_HOST': 'example.com:80',
'HTTP_REFERER': 'https://example.com/user/delete/49/',
'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0',
'HTTP_X_FORWARDED_FOR': '1.2.3.4, 192.168.252.22',
'HTTP_X_FORWARDED_PROTO': 'https',
'HTTP_X_REAL_IP': '1.2.3.4',
Run Code Online (Sandbox Code Playgroud)

并且HTTP请求具有以下标头:

'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'HTTP_ACCEPT_ENCODING': 'gzip, deflate',
'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.5',
'HTTP_CONNECTION': 'close',
'HTTP_COOKIE': 'redacted',
'HTTP_HOST': 'example.com.com:80',
'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0',
'HTTP_X_FORWARDED_FOR': '1.2.3.4, 192.168.252.22',
'HTTP_X_FORWARDED_PROTO': 'http',
'HTTP_X_REAL_IP': '1.2.3.4',
Run Code Online (Sandbox Code Playgroud)

当我在HTTP上没有问题时,为什么CSRF不能在HTTPS上工作?

django https django-csrf

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

csrf_exempt无法使用django auth

我正在为移动应用程序制作后端,并使用Django和Userena进行用户管理.我使用Django REST框架进行登录并注册,一切正常.我现在唯一需要做的就是实现"忘记密码"功能.我想使用已经实现的Userena,但是即使在使用csrf_exemptdectorator 之后我也无法摆脱"CSRF令牌丢失或错误"的错误.我在做什么?

urls.py

from django.contrib.auth.views import password_reset
from django.views.decorators.csrf import csrf_exempt
...
urlpatterns = patterns(
    '',
    url(r'^password/mobile/reset/$',
       csrf_exempt(password_reset),
       {'template_name': 'userena/password_reset_form.html',
        'email_template_name': 'userena/emails/password_reset_message.txt',
        'extra_context': {'without_usernames': userena_settings.USERENA_WITHOUT_USERNAMES}
        },
       name='userena_password_mobile_reset'),
)
Run Code Online (Sandbox Code Playgroud)

passowrd_reset_form.html

{% extends 'userena/base_userena.html' %}
{% load i18n %}

{% block title %}{% trans "Reset password" %}{% endblock %}

{% block content %}
<form action="" method="post">
  <fieldset>
    <legend>{% trans "Reset Password" %}</legend>
    {% csrf_token %}
    {{ form.as_p }}
  </fieldset>
  <input type="submit" value="{% trans "Send password" %}" />
</form>
{% …
Run Code Online (Sandbox Code Playgroud)

django django-csrf csrf-protection django-rest-framework

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

Django CSRF保护移动应用程序和Chrome扩展

我使用django作为我的后端做了一些移动应用程序,现在我正在开发一个chrome扩展程序.我希望我的用户能够使用app/extension将POST请求发送到服务器,但有没有办法在没有首先向服务器请求CSRF令牌的情况下执行此操作?它只是保存应用程序每次我们想要提交数据时发出两个请求.例如,我想在我的社交媒体应用上更新我的个人资料或从Chrome扩展程序更新钱包.打开配置文件视图输入数据并将其推送到服务器会很不错.如果我必须打开配置文件,然后等待它从服务器获取令牌然后我可以提交数据,它就不那么光滑了.还有另一种方法吗?或者我每次想要提交数据时都会发出多个请求?

此外,一点点澄清,CSRF阻止网站提交包含用户数据的表单.但是什么阻止我创建一个使用ajax或其他东西的网站来获取真实网站并窃取CSRF令牌然后将其粘贴到我的跨站点请求表单中?我觉得这里有一个漏洞.我知道我一直都不太了解这一点.

django csrf django-csrf

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

如果缺少csrf cookie,则忽略Django 1.6 HTTP_X_CSRFTOKEN标头

我有AJAX代码,可向Django 1.6.4应用程序发出POST请求。该视图通过启用了CSRF保护django.middleware.csrf.CsrfViewMiddleware。如果我没有传递cookie,但是传递了HTTP_X_CSRFTOKEN,则它将失败。

我正在查看的代码,django.middleware.csrf.CsrfViewMiddleware并且在161行上看到它会检查是否if csrf_token is None:从cookie中获取了代码。如果为None,则返回。之后才检查csrfmiddlewaretoken参数和HTTP_X_CSRFTOKEN请求标头。这看起来是不正确的,只有在检查了所有可能的位置后才能检查csrf_token值是否丢失。

还有其他人有类似的问题吗?我看错了吗?

django django-csrf django-1.6

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

使用CSRF令牌从iOS发布到Django Server

我有一个iOS应用程序,需要登录到使用Django的现有站点,并需要CSRF令牌登录.我无法改变这一点.

我当前的尝试是将GET发送到服务器,该服务器将返回CSRF,然后将该cookie作为字符串抓取并将其附加到POST请求.

NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:@"http://example.com"]];
[req setHTTPShouldHandleCookies:YES];
[NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    self.csrf_cookie = [[(NSHTTPURLResponse *)response allHeaderFields] valueForKey:@"Set-Cookie"];
    [self postLoginCredentialsEmail:@"user@example.com" password:@"password"];
}];

- (void)postLoginCredentialsEmail:(NSString *)email password:(NSString *)password {
    NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:@"http://example.com/login"]];
    [req addValue:(self.csrf_cookie != nil ? self.csrf_cookie : @"poo") forHTTPHeaderField:@"X-CSRFToken"];
    [req setHTTPMethod:@"POST"];
    NSString *postData = [NSString stringWithFormat:@"password=%@&;email=%@", password, email];
    [req setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-type"];
    [req setHTTPBody:[postData dataUsingEncoding:NSUTF8StringEncoding]];
    [NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, …
Run Code Online (Sandbox Code Playgroud)

django cookies django-csrf ios

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

使用fetch post请求进行正确的Django CSRF验证

我正在尝试使用JavaScript的fetch库来向我的Django应用程序提交表单.但无论我做什么,它仍然抱怨CSRF验证.

关于Ajax的文档提到了指定我尝试过的头文件.

我还尝试从templatetag中获取令牌并将其添加到表单数据中.

这两种方法似乎都不起作用.

以下是包含表单值和标题的基本代码:

let data = new FormData();
data.append('file', file);;
data.append('fileName', file.name);
// add form input from hidden input elsewhere on the page
data.append('csrfmiddlewaretoken', $('#csrf-helper input[name="csrfmiddlewaretoken"]').attr('value'));
let headers = new Headers();
// add header from cookie
const csrftoken = Cookies.get('csrftoken');
headers.append('X-CSRFToken', csrftoken);
fetch("/upload/", {
    method: 'POST',
    body: data,
    headers: headers,
})
Run Code Online (Sandbox Code Playgroud)

我能够使用JQuery,但想尝试使用fetch.

javascript django django-csrf fetch-api

3
推荐指数
3
解决办法
3008
查看次数