【问题标题】:missing _xsrf argument on Angular post requestAngular 发布请求中缺少 _xsrf 参数
【发布时间】:2018-10-02 14:08:08
【问题描述】:

我想使用 Angular 6.x Web 应用程序将 tornado 作为后端服务器。如果我现在向本地托管的服务器发送 POST 请求,请求会到达,但 tornado 会以 403 回复,打印以下内容:

'_xsrf' argument missing from POST 

由于我不想关闭 xsfr cookie,我现在需要一个解决方案,如何使用 Angular 6 的 HttpClient 添加此特定参数。 Angulars 官方文档仅声明,为所有请求设置了一个令牌。

现在有一个已弃用的版本,它通过将以下内容添加到app.module.ts 中定义的提供程序列表中来工作。然而,文档只是声明要查看新的 HttpClient,这并不是很有帮助。

{
    provide: XSRFStrategy,
    useValue: new CookieXSRFStrategy('csrftoken', 'X-CSRFToken')
}

后端cookies在登录时设置如下:

def post(self):
    incorrect = self.get_secure_cookie("incorrect")
    if incorrect and int(incorrect) > 10:
        return

    getusername = tornado.escape.xheml_escape(self.get_argument("username"))
    getpassword = tornado.escape.xheml_escape(self.get_argument("password"))

    print(getusername)
    print(getpassword)

    if getusername == "admin" and getpassword == "admin":
        self.set_secure_cookie("user", self.get_argument("username"))
        self.set_secure_cookie("incorrect", "0")
        self.redirect(self.reverse_url("main"))
    else:
        incorrect = self.get_secure_cookie("incorrect") or 0
        increased = str(int(incorrect) + 1)
        self.set_secure_cookie("incorrect", increased)
        self.write("Wrong username or password")

我绝对看到这根本不安全,但在进一步开发过程中会增加更多安全性。这只是一个让所有东西都能正常工作的基本示例。

也许你们中的某个人已经解决了这个问题,并且有一个解决方案,或者至少有一个提示。

【问题讨论】:

    标签: angular security tornado x-xsrf-token


    【解决方案1】:

    两件事:

    1. 您正在尝试设置 CSRF cookie,而 Tornado 是之前已经设置过 cookie 的那个。
    2. 当您提交表单时,Tornado 期望您发送一个名为 _xsrf 的表单字段或 post 请求参数,其值与 Tornado 设置的 cookie 相同。

    如何解决:

    1. 你要做的就是读取 Tornado 设置的 cookie 的值。 cookie 的名称将是 _xsrf

    2. 然后,当您发送 POST 请求时,在表单数据中包含一个名为 _xsrf 的字段,其中包含 cookie 的值。

    【讨论】:

    • 我完全明白你在说什么,唯一的问题是,tornado 从不设置 cookie,因为前端不是直接通过 tornado 提供的。即使我通过 StaticFileHandler 实例为前端提供服务,也没有任何 cookie 出现在角度侧。我尝试实现一个简单的事务,其中 Angular 发送一个 GET 请求 cookie 令牌。这很好用,但是 Chrome 和 Firefox 会阻止 Angular 自行设置 cookie。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    相关资源
    最近更新 更多