Playframework play框架上的多种内容安全策略

Playframework play框架上的多种内容安全策略,playframework,playframework-2.0,xss,content-security-policy,Playframework,Playframework 2.0,Xss,Content Security Policy,使用play framework,我希望对传入的请求应用不同的策略,以允许外部html+脚本在我的网站上运行。这对于一些第三方集成是必要的,他们为您提供自己的html+脚本内容,供用户交互,并且必须通过您的原始网站交付 策略应该基于某些条件定义,主要是子域。在过滤器规范中,只有一个全局过滤器影响整个站点。但我不想放松。对某些特定问题的请求 我的website.com上的thirdparty.website.com应该有宽松的政策,甚至根本没有政策,但剩下的网站应该继续实行紧缩政策 我很感激任何想

使用play framework,我希望对传入的请求应用不同的策略,以允许外部html+脚本在我的网站上运行。这对于一些第三方集成是必要的,他们为您提供自己的html+脚本内容,供用户交互,并且必须通过您的原始网站交付

策略应该基于某些条件定义,主要是子域。在过滤器规范中,只有一个全局过滤器影响整个站点。但我不想放松。对某些特定问题的请求 我的
website.com
上的
thirdparty.website.com
应该有宽松的政策,甚至根本没有政策,但剩下的网站应该继续实行紧缩政策


我很感激任何想法或帮助。

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

非常简单,这里复制SecurityHeadersFilter应用,如果主机和路径条件都满足,则跳过安全头。如果不是,则保留原始行为

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): _*))
    }
  }
}
另外,将过滤器添加到
过滤器中

class Filters @Inject() (corsFilter: CORSFilter,
                         allowedHostsFilter: AllowedHostsFilter,
                         gzipFilter: GzipFilter,
                         customSecurityHeadersFilter: ConditionalSecurityHeadersFilter
                        ) extends HttpFilters {
  def filters = Seq(corsFilter,
    allowedHostsFilter,
    gzipFilter,
    customSecurityHeadersFilter
  )
}

您可能需要编写自己的过滤器。在此筛选器中,您可以检查
请求
对象中的头、域等,然后将特定头应用于响应。看看Play是如何实现它的SecurityHeadersFilterThanks@mkurz的,你所描述的方式非常有效。很高兴听到我能帮忙。