post - 没有模板的 Tornado XSRF token

标签 post backbone.js cookies tornado csrf

我目前正在 Tornado 上实现一个包含 Backbone Marionette 的项目,但遇到了 XSRF token 的问题。由于 XSRF 不是通过模板传递的(通过 xsrf_form_html() ),当用户登录应用程序时,向登录 url“//login”发出 GET 请求并通过以下方式检索 xsrf token :

class LoginHandler(BaseHandler):
"""
"""

def get(self):
    token = self.xsrf_token
    self.respond(dict(_xsrf=token))

self.respond 看起来像:

def respond(self, response=None):
    """
    :param data:
    :return:
    """

    if response is not None:
        self.set_header('Content-Type', 'application/json')
        self.write(json.dumps(response))
    else:
        self.set_header('Content-Type', 'text/plain')
        self.write("")

但是,每当对服务器进行 POST(字段值为 "_xsrf": token)时,我都会收到标志性的“XSRF cookie 与 POST 参数不匹配”。由于 xsrf cookie 不存在,服务器上的 xsrf token 似乎在每次请求时都重新生成(到目前为止,我确保 cookie 存在的尝试失败了……不完全确定如何坚持下去)。也许我在这里遗漏(或误解)了一些关键的东西,但我希望外面的其他人遇到过这样的范例并有解决方案或建议。

提前致谢!

最佳答案

xsrf token 必须以两种不同的方式发送,并且它们必须匹配。一次在 cookie 中,一次在 header 或表单编码的 POST 正文中(正文不能是 json,并且必须具有表单编码或多部分内容类型)。只要您的客户可以发送标题,通常首选标题;您需要同时发送 Cookie: _xsrf=fooX-Xsrf-Token: foo

从 Tornado 3.2.2 开始,xsrf token 包含一个随机组件来对抗 BREACH 攻击,因此两个 token 可以匹配而不相同。

关于post - 没有模板的 Tornado XSRF token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25183302/

相关文章:

php - 将图像从swift上传到php服务器时出错

angularjs - 在angularjs xeditable表成功之前将数据插入表(数组)

c# - ServiceStack Backbone.Todos 不允许删除 405

ruby-on-rails - 我的 cookie token 是否足够强大,可以用于用户身份验证目的?

php - 如何自动注销 Laravel 中所有设备的所有用户?

javascript - 使用 POST 在 JQuery 中传递数组并使用 Flask 读取它

javascript - BackboneJS,保存模型时遇到成功和错误问题

javascript - 如何在backbone.js中显示html内容

php - 这个登录系统足够安全吗?

Android Webview POST