【问题标题】:multiple content security policies on play framework播放框架上的多种内容安全策略
【发布时间】:2017-02-14 09:40:36
【问题描述】:

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

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

感谢任何想法或帮助。

【问题讨论】:

  • 您可能必须编写自己的过滤器。在此过滤器中,您可以检查 request 对象的标头、域等,然后将特定标头应用于响应。请参阅github.com/playframework/playframework/blob/2.5.x/framework/src/… Play 如何实现它的 SecurityHeadersFilter
  • 谢谢@mkurz,你描述的方法效果很好。
  • 很高兴听到我能帮上忙。

标签: playframework playframework-2.0 xss content-security-policy


【解决方案1】:

如果有人需要,这是一个工作示例。 (感谢@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): _*))
    }
  }
}

另外,将过滤器添加到Filters

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-31
    • 2018-01-14
    • 2018-06-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    相关资源
    最近更新 更多