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

时间:2013-01-30 21:48:26

标签: json security playframework-2.0 prefix

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

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

2 个答案:

答案 0 :(得分:1)

“JSONP升级漏洞”是什么意思? (googling for it将这个问题作为第一个结果返回,几乎没有其他内容。

您是否希望阻止人们将JSON用作JSONP?然后就不要包含JSONP padding

您是否希望阻止人们在没有相同原始策略问题的情况下在其他程序中使用您的JSON,在浏览器之外或使用自己的服务器代理它们以便为自己域中的客户端提供服务等?那是不可能的。即使你服务一些残缺的JSON,他们也会想出来。你唯一能做的就是写出禁止这个的条款和条件并起诉他们(祝你好运)。

答案 1 :(得分:1)

我认为在这种情况下理想的做法是解决自定义隐式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(;;);”所以这是一个很好的保障。您可以查看有关此类漏洞的更多详细信息here