不与json合作,但在Postman中使用urlencoding

时间:2017-03-14 13:33:14

标签: angularjs playframework csrf

我被困了,我花了差不多一整天才解决这个问题。 我正在尝试将csrf安全性集成到我们的网站,该网站使用play framework 2.5.9和angularjs 1.x编写。我添加了csrf的东西,我试图通过邮递员测试。 虽然它的工作原理是内容类型设置为x-www-form-urlencoded,但是当它设置为application / json时不起作用。它给了我

Content-Length →0
Date →Tue, 14 Mar 2017 13:22:13 GMT
error →No CSRF token found for application/json body

我的json是

{
    "username": "admin", 
    "email": "admin", 
    "password": "123456", 
    "consumer": "consumer",
    "csrfToken": "c29625a2c1c26bfbd4e74f6f6499d21f9a21aed-1489470934941-ae012aab7984ed13bfc697ea"
}

它出了什么问题?我错过了什么吗? 任何帮助,赞赏。

修改 顺便说说, 当我通过添加以下行禁用csrf检查application.conf时

X-Requested-With = "*"
Csrf-Token = "nocheck"

post方法适用于application / json内容类型。

1 个答案:

答案 0 :(得分:2)

播放default CSRF protection过滤器检查

  1. 查询字符串
  2. 标题
  3. application/x-www-form-urlencoded内容类型
  4. multipart/form-data内容类型
  5. 您可以查看来源:

    https://github.com/playframework/playframework/blob/master/framework/src/play-filters-helpers/src/main/scala/play/filters/csrf/CSRFActions.scala#L425

    https://github.com/playframework/playframework/blob/master/framework/src/play-filters-helpers/src/main/scala/play/filters/csrf/CSRFActions.scala#L66

    https://github.com/playframework/playframework/blob/master/framework/src/play-filters-helpers/src/main/scala/play/filters/csrf/CSRFActions.scala#L90

    所以你能做什么:

    1. csrfToken添加到查询字符串...?csrfToken=...(不推荐)
    2. crfToken添加到标题
    3. 禁用它
    4. 编写自己的CSRF过滤器