标签: django-csrf

Django Rest Framework删除csrf

我知道有关于Django Rest Framework的答案,但我无法找到解决问题的方法.

我有一个具有身份验证和一些功能的应用程序.我添加了一个新的应用程序,它使用Django Rest Framework.我想只在这个应用程序中使用该库.我也想发出POST请求,我总是收到这个回复:

{
    "detail": "CSRF Failed: CSRF token missing or incorrect."
}
Run Code Online (Sandbox Code Playgroud)

我有以下代码:

# urls.py
from django.conf.urls import patterns, url


urlpatterns = patterns(
    'api.views',
    url(r'^object/$', views.Object.as_view()),
)

# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from django.views.decorators.csrf import csrf_exempt


class Object(APIView):

    @csrf_exempt
    def post(self, request, format=None):
        return Response({'received data': request.data})
Run Code Online (Sandbox Code Playgroud)

我想添加API而不影响当前的应用程序.所以我的问题是如何才能为此应用禁用CSRF?

django csrf django-csrf django-rest-framework

95
推荐指数
8
解决办法
6万
查看次数

禁止 (403) CSRF 验证失败。请求被中止。失败原因:来源检查失败与任何可信来源不匹配

帮助

\n

失败原因给出:

\n
Origin checking failed - https://praktikum6.jhoncena.repl.co does not match any trusted origins.\n
Run Code Online (Sandbox Code Playgroud)\n

一般来说,当存在真正的跨站请求伪造时,或者当 Django\xe2\x80\x99s CSRF 机制未正确使用时,就会发生这种情况。对于 POST 表单,您需要确保:

\n
Your browser is accepting cookies.\nThe view function passes a request to the template\xe2\x80\x99s render method.\nIn the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL.\nIf you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those …
Run Code Online (Sandbox Code Playgroud)

python django csrf django-csrf python-3.x

80
推荐指数
3
解决办法
9万
查看次数

"CSRF令牌丢失或不正确",同时在Django中通过AJAX发布参数

我尝试发布参数

 jQuery.ajax(
        {
            'type': 'POST',
            'url': url,
            'contentType': 'application/json',
            'data': "{content:'xxx'}",
            'dataType': 'json',
            'success': rateReviewResult 
        }
    );
Run Code Online (Sandbox Code Playgroud)

但是,Django返回Forbidden 403. CSRF verification failed. Request aborted. 我正在使用,'django.middleware.csrf.CsrfViewMiddleware'并且无法在不影响安全性的情况下找到如何防止此问题.

django jquery django-csrf

61
推荐指数
6
解决办法
8万
查看次数

如何使用curl与Django,csrf令牌和POST请求

我正在使用curl测试我的一个Django表单.我尝试过的调用(每个调用都有错误,多行可读):

(1):

curl
-d "{\"email\":\"test@test.com\"}"
--header "X-CSRFToken: [triple checked value from the source code of a page I already loaded from my Django app]"
--cookie "csrftoken=[same csrf value as above]"
http://127.0.0.1:8083/registrations/register/
Run Code Online (Sandbox Code Playgroud)

(使用http标头和csrftokencookie)导致400错误,没有返回数据.

(2):

curl
-d "{a:1}"
--header "X-CSRFToken:[as above]"
--cookie "csrftoken=[as above];sessionid=[from header inspection in Chrome]"
http://127.0.0.1:8083/registrations/register/
Run Code Online (Sandbox Code Playgroud)

(如在(1)中但在头属性声明中没有空格,并且sessionid在cookie中也没有空格)导致相同的400错误而没有返回数据.

(3):

curl
-d "{a:1}"
--header "X-CSRFToken:[as above]"
http://127.0.0.1:8083/registrations/register/
Run Code Online (Sandbox Code Playgroud)

(只有http标头X-CSRFToken,没有cookie)会导致错误代码403,并显示消息:未设置CSRF cookie.

如何用卷曲测试我的表单?除了cookie值和http标头之外,我还没有考虑哪些因素?

django curl csrf django-forms django-csrf

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

CSRF与Django,React + Redux使用Axios

这是一个教育项目,不适用于生产.我不打算将用户登录作为其中的一部分.

我可以使用CSRF令牌对Django进行POST调用而无需用户登录吗?我可以不使用jQuery吗?我在这里超出了我的深度,肯定会混淆一些概念.

对于JavaScript方面,我发现了这个redux-csrf包.我不确定如何将它与我POST使用Axios的动作结合起来:

export const addJob = (title, hourly, tax) => {
  console.log("Trying to addJob: ", title, hourly, tax)
  return (dispatch) => {
    dispatch(requestData("addJob"));
    return axios({
      method: 'post',
      url: "/api/jobs",
      data: {
        "title": title,
        "hourly_rate": hourly,
        "tax_rate": tax
      },
      responseType: 'json'
    })
      .then((response) => {
        dispatch(receiveData(response.data, "addJob"));
      })
      .catch((response) => {
        dispatch(receiveError(response.data, "addJob"));
      })
  }
};
Run Code Online (Sandbox Code Playgroud)

在Django方面,我已经阅读了关于CSRF的这个文档,通常与基于类的视图一起使用.

这是我到目前为止的观点:

class JobsHandler(View):

    def get(self, request):
        with open('./data/jobs.json', 'r') as f:
            jobs = json.loads(f.read())

        return …
Run Code Online (Sandbox Code Playgroud)

django django-csrf reactjs redux axios

40
推荐指数
5
解决办法
3万
查看次数

如何将django csrf令牌直接嵌入到HTML中?

在我的django应用程序中,我在数据库中存储html字符串,然后将在用户的主页上显示为"消息".其中一些消息包含表单,但没有用模板语言编写,我无法插入csrf令牌(因此破坏了应用程序).

有没有办法直接从我正在编辑的python文件中插入此标记?我正在寻找以下内容:

csrf_token = django.csrf.generate()
message = "press the button please: <form><input type='hidden' name='csrf_token' value='%s'><input type='submit' value='press here'></form>" % (csrf_token)
Run Code Online (Sandbox Code Playgroud)

任何其他可以在类似情况下工作的解决方案都会很棒.谢谢

编辑: 实际上这不会起作用,因为每个会话的令牌都不同,因此将其存储在数据库中并不是很有用.有没有办法在视图中动态加载令牌?

django csrf django-csrf

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

使用带有Django CSRF保护的angular2 http请求的正确方法是什么?

在Angular1中,可以通过配置$ http-provider来解决问题.喜欢:

app.config(function($httpProvider) {
  $httpProvider.defaults.xsrfCookieName = 'csrftoken';
  $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
});
Run Code Online (Sandbox Code Playgroud)

在Angular2中做同样的事情有什么好处?

在Angular2中使用http请求我们需要使用类Http.当然,在每个后期函数调用中添加CSRF-line并不是一个好习惯.

我想在Angular2中我应该创建自己的类来继承Angular2的Http类并重新定义后期函数.这是正确的方法还是有更优雅的方法?

django csrf django-csrf angular

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

@csrf_exempt停止在Django 1.4中工作

我有以下代码,在Django 1.2.5中工作正常:

from django.views.decorators.csrf import csrf_exempt

class ApiView(object):
    def __call__(self, request, *args, **kwargs):
        method = request.method.upper()
        return getattr(self, method)(request, *args, **kwargs)

@csrf_exempt
class MyView(ApiView):

    def POST(self):
       # (...)
       return HttpResponse(json.dumps(True), mimetype="text/javascript")
Run Code Online (Sandbox Code Playgroud)

但是当我升级到Django 1.4时,我开始禁止403,"CSRF验证失败"消息.

为什么@csrf_exempt装饰工作不起作用?

网址定义是:

from django.conf.urls.defaults import *
from django.views.decorators.csrf import csrf_exempt

import views

urlpatterns = patterns('',
   url(r'^myview/(?P<parameter_name>[A-Za-z0-9-_]+)/$',
       views.MyView(),
       name="myproject-myapp-myview",
       ),
)
Run Code Online (Sandbox Code Playgroud)

python django csrf django-csrf

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

Django的{{csrf_token}}仅输出令牌值,没有隐藏的输入标记

当我使用时,为什么不显示隐藏输入字段的标记{{ csrf_token }}

这是我模板中的一个片段:

<form action="." method="post">
{{ csrf_token }}
Run Code Online (Sandbox Code Playgroud)

我期待生成这样的东西:

<form action="." method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="0c90dab91e22382cbaa5ef375f709167">
Run Code Online (Sandbox Code Playgroud)

但相反,这是生成的HTML:

<form action="." method="post">
0c90dab91e22382cbaa5ef375f709167
Run Code Online (Sandbox Code Playgroud)

我已经做了很多次,并且在我的其他项目中工作正常,但我不知道这次我错过了什么.

我的views.py文件如下所示:

from django.shortcuts import render_to_response
from django.template import RequestContext

def home(request):
    return render_to_response('home.html',
                              context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

如您所见,我正在使用RequestContext.我的中间件类在settings.py文件中定义如下:

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)

所以我使用的是django.middleware.csrf.CsrfViewMiddleware.另外,我在Django 1.3.0上.有什么想法吗?

django django-csrf

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

Django - {%csrf_token%}在模板中使用,但上下文没有提供值

我是Django的新手,我仍然试图掌握它的功能.我用Django 1.4.2创建了一个非常简单的项目,它有一个简单形式的索引页面,你输入的东西和结果页面,你的输入在提交后显示(代码如下).

提交后,我收到错误403和以下消息:

模板中使用了{%csrf_token%},但上下文未提供值.这通常是由于不使用RequestContext引起的.warnings.warn(模板中使用了"A {%csrf_token%}",但上下文没有提供值.这通常是由于不使用RequestContext引起的.")

的index.html

<!DOCTYPE html>
<head>
    <title>Index page</title>
</head>
<body>
    <div id="header">Welcome to index page</div>
    <div id="content">
        <p>Enter your name</p>
        <form action="/result/" method="post" accept-charset="utf-8">{% csrf_token %}
            <input type="text" name="answer">
            <input type="submit" value="Send!">
        </form>
    </div>
</body>
Run Code Online (Sandbox Code Playgroud)

result.html

<!DOCTYPE html>
<head>
    <title>Result page</title>
</head>
<body>
    <div id="header">Here is the result</div>
    <div id="content">
        <p>Your name is: {{ answer }}</p>
    </div>
</body>
Run Code Online (Sandbox Code Playgroud)

views.py

from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.template import RequestContext

def index(request):
    return render_to_response('index.html') …
Run Code Online (Sandbox Code Playgroud)

django csrf django-csrf

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