如何在 play2 中的所有 JSON 响应添加前缀,以防止通过易受攻击的请求升级 JSONP



我想在我所有的 JSON 响应前面加上一系列引号,如 ")]}',",以防止 JSONP 升级漏洞。

如何在 play2 框架中完成?我已经将我的身体解析器设置为 JSON 并手动为所有响应添加前缀,但我正在寻找一种更优雅的方式来通过本机框架功能来完成这项工作。

"JSONP 升级漏洞"是什么意思?(谷歌搜索它会返回这个问题作为第一个结果,几乎没有其他结果)。

你想阻止人们使用你的JSONP作为JSONP吗?然后不要包含 JSONP 填充。

您是否要防止人们在没有相同来源策略问题的其他程序中使用您的 JSON,或者在浏览器之外使用自己的服务器代理它以服务于他们自己的域中的客户端等?那就不可能了。即使您提供一些残缺的JSON,他们无论如何都会弄清楚。您唯一能做的就是编写禁止此操作并起诉他们的条款和条件(祝您好运)。

我认为在这种情况下理想的做法是解析为自定义隐式play.api.http.Writable。您可以通过向控制器扩展的特征添加隐式定义来执行此操作:

import play.api.http.Writeable
trait SecuredJsonController {
  implicit def writeableOf_JsValue(implicit codec: Codec): Writeable[JsValue] = {
    Writeable(jsval => codec.encode(")]}',n" + jsval.toString))
  }
}

这对我来说很有效。我不确定您在回复 Zed 时的意思是什么,但尝试通过填充响应正文来崩溃 JSON 漏洞利用是很常见的,就像您最初要求的那样。Google使用"while(1);",Facebook使用"for(;;);",因此这是一个很好的保护措施。您可以在此处查看有关此类漏洞的更多详细信息。

最新更新