Nginx:仅允许http响应

时间:2017-08-28 06:41:06

标签: nginx cookies playframework

我正在使用playframework和nginx。 playframework可以将以下cookie添加到http响应:PLAY_SESSION,PLAY_FLASH,PLAY_LANG。
我想确保在nginx级别只允许上面的cookie(PLAY_ *)。如果还有其他Cookie(让我们意外添加它们),则应该通过nginx删除它们。
如何在nginx中仅允许http响应中的预定义cookie?

PS:如果在nginx中无法解决此问题,我需要使用playframework进行修复。

1 个答案:

答案 0 :(得分:2)

对于Nginx解决方案,可能值得在serverfault询问。以下是Play Framework的潜在解决方案。

package filters

import javax.inject._
import play.api.mvc._
import scala.concurrent.ExecutionContext

@Singleton
class ExampleFilter @Inject()(implicit ec: ExecutionContext) extends EssentialFilter {
  override def apply(next: EssentialAction) = EssentialAction { request =>
    next(request).map { result =>
      val cookieWhitelist = List("PLAY_SESSION", "PLAY_FLASH", "PLAY_LANG")
      val allCookies = result.newCookies.map(c => DiscardingCookie(c.name))
      val onlyWhitelistedCookies = result.newCookies.filter(c => cookieWhitelist.contains(c.name))

      result.discardingCookies(allCookies: _*).withCookies(onlyWhitelistedCookies: _*)
    }
  }
}

此解决方案使用FiltersResult manipulation。测试对性能的不利影响。