播放框架上的多个内容安全策略

时间:2017-02-14 09:40:37

标签: playframework playframework-2.0 cors xss

使用Play框架,我想对传入的请求应用不同的策略,以允许外部html +脚本在我的网站上运行。对于为您提供自己的html +脚本内容,供用户进行交互以及必须通过原始网站提供的第三方集成,这是必需的。

应根据某些条件(主要是子域)定义策略。在过滤器规范中,只有一个全局play.filters.headers.contentSecurityPolicy影响整个站点。但我不想放松它。对某些特定要求 我thirdparty.website.com上的website.com应该获得宽松政策甚至根本没有政策,但剩下的网站应该继续采取紧缩政策。

我感谢任何想法或帮助。

1 个答案:

答案 0 :(得分:1)

如果有人需要,这是一个工作示例。 (感谢@mkurz指针

非常简单,如果主机和路径条件都满足,则会在此处复制SecurityHeadersFilter apply并跳过安全标头。如果不是,则保留原始行为。

func pickerView(pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat 
{
  return self.view.bounds.width / x
}

另外,将过滤器添加到class ConditionalSecurityHeadersFilter @Inject() (implicit config: SecurityHeadersConfig) extends SecurityHeadersFilter(config) { override def apply (next: EssentialAction) = EssentialAction { req => val HostPattern: Regex = "..some regex..".r val PathsToBypass: List[String] = [...] import play.api.libs.iteratee.Execution.Implicits.trampoline req.host.toLowerCase match { case HostPattern(...) => if (PathsToBypass.map{path => path.r.findFirstIn(req.path) }.count { p => p.isDefined } > 0) next(req) else next(req).map(_.withHeaders(headers(req): _*)) case _ => next(req).map(_.withHeaders(headers(req): _*)) } } }

Filters