我正在使用playframework和nginx。 playframework可以将以下cookie添加到http响应:PLAY_SESSION,PLAY_FLASH,PLAY_LANG。
我想确保在nginx级别只允许上面的cookie(PLAY_ *)。如果还有其他Cookie(让我们意外添加它们),则应该通过nginx删除它们。
如何在nginx中仅允许http响应中的预定义cookie?
PS:如果在nginx中无法解决此问题,我需要使用playframework进行修复。
答案 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: _*)
}
}
}
此解决方案使用Filters和Result
manipulation。测试对性能的不利影响。