我想在我的所有 JSON 响应前面加上一系列引号,例如 ")]}',\n",以防止 JSONP 升级漏洞。
如何在 play2 框架中完成?我已将我的 bodyparsers 设置为 JSON 并手动为所有响应添加前缀,但我正在寻找一种更优雅的方式来通过本机框架功能完成这项工作。
我想在我的所有 JSON 响应前面加上一系列引号,例如 ")]}',\n",以防止 JSONP 升级漏洞。
如何在 play2 框架中完成?我已将我的 bodyparsers 设置为 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 漏洞利用是很常见的,就像您最初询问的那样。谷歌用“while(1);”来做到这一点 和 facebook 用 "for(;;);" 所以这是一个很好的保障。您可以在此处查看有关此类漏洞的更多详细信息。
“JSONP 升级漏洞”是什么意思?(谷歌搜索它返回这个问题作为第一个结果,几乎没有别的)。
您想阻止人们将您的 JSON 用作 JSONP 吗?然后不包括JSONP padding。
您是否想阻止人们在没有相同来源策略问题的其他程序中使用您的 JSON,在浏览器之外或使用他们自己的服务器代理它以服务于他们自己域中的客户端等?那么这是不可能的。即使你提供了一些残缺的 JSON,他们无论如何都会弄清楚。你唯一能做的就是写下禁止这样做的条款和条件并起诉他们(祝你好运)。