0

我正在使用基于以下原则的 CakePHP 站点:

  • 管理员可以上传图像并在其中标记模型。
  • 管理员可以选择公开某些照片,以获得公开可见的投资组合。
  • 管理员可以通过使用密钥注册来邀请人们加入该站点,该密钥将用户与特定模型相关联。然后,用户将能够在需要登录的站点的私人部分看到他/她的所有照片,有点像每个单独模型的私人投资组合。
  • 所有图像都放在一个文件夹中,其中deny from all.htaccess 文件阻止访问。
  • 媒体控制器负责提供图像,当请求文件时,会完成数据库表查找并在以下情况下授予访问权限: 用户已登录且管理员;用户已登录并在照片中被标记;或照片被标记为公开。如果不是,则返回状态码 403。
  • 为了使整个体验更加快捷并避免不必要的下载,使用了缓存,其中检查文件的编辑时间戳并304发送相应的状态码(通过设置$this->response->modified文件时间戳和检查$this->response->checkNotModified($this->request)请求)。
  • 图像通过$this->response->file控制器中的发送MediaController

总而言之,这一切都按预期工作,但有一个问题:如果由于某种原因,一张不应该公开的照片因错误而暴露,那么缓存就会出现问题。

假设确实有权访问文件的人登录并且他们能够按预期查看/下载照片。然后此用户注销,其他人接管 PC。他们转到公共投资组合页面,其中同一张私人照片因某些错误(基本上是错误或人为管理错误)而暴露,但由于最后一个登录的用户确实有权访问它,它在缓存中,即使服务器返回一个状态码403,浏览器将忽略它并从缓存中提供图像。

如果我没有失去你,我的问题是:有没有办法解决这个问题?我可以强制浏览器考虑 403 状态码吗?或者我的媒体控制器设置/设计中是否存在其他缺陷使其无法使用?

还是这个问题不太可能对小型业余摄影师造成问题?对于专业知名摄影师来说,这是否会被视为(严重)安全漏洞?

非常感谢任何见解!:)

4

0 回答 0