【问题标题】:csrf issue from node js to django从节点 js 到 django 的 csrf 问题
【发布时间】:2016-05-15 20:54:25
【问题描述】:

我想将 csrftoken 从 node.js 传递给 django。我的 server.js 中有这段代码

socket.on('unread global', function (data) { 
var values=querystring.stringify();

var options = {
  hostname:'localhost',
  port:'8000',
  path:'/chat/global_unread/',
  method:'POST',
  headers:{
    'Content-Type':'application/x-www-form-urlencoded',
    'Cookie': 'csrftoken=' + data.csrf,
    'Content-Length':values.length
}
}

我的数据来自调用我的 server.js 的 jquery 函数

var datos = { // datos is the data that will be send to Node.js

        user: USER_PK_CHAT,
        csrf : window.CSRF_TOKEN

      };

  socket.emit('unread global', datos);

但最后我的控制台中总是出现同样的错误

失败原因:

CSRF token missing or incorrect.

一般来说,当存在真正的跨站请求伪造时,或者

对于 POST 表单,您需要 确保:

您的浏览器正在接受 cookie... 等等 有人可以帮助我吗?

【问题讨论】:

  • 很可能令牌不正确。您需要检查有关初始请求以检索令牌的更多详细信息。
  • Django 和 node.js 几乎可以肯定使用不同的机制来生成 CSRF 令牌。

标签: javascript jquery django node.js


【解决方案1】:

CSRF 中间件查找以下 COOKIE:

request.COOKIES[settings.CSRF_COOKIE_NAME]

并将其与 POST csrfmiddlewaretoken 进行比较。

所以你必须确保对 node 的调用设置了正确的 cookie 名称:

'Cookie': 'csrftoken=' + data.csrf`

另外,POST 包含csrfmiddlewaretoken。在 javascript 中访问 COOKIE 并将其作为正确的令牌发送是安全的,只需确保使用 CSRF_COOKIE_SECURE。比较好的办法通常是让django把token作为输入字段,单独设置cookie。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 2019-05-31
    • 2019-06-13
    • 2019-06-29
    • 2021-03-25
    • 1970-01-01
    • 2011-06-30
    相关资源
    最近更新 更多