CakePHP,限制通过媒体控制器访问图像和缓存

时间:2013-10-28 22:53:28

标签: php image security cakephp caching

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

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

总而言之,这可以按预期工作,但是有一个问题:如果出于某种原因,错误会暴露不应公开的照片,则缓存会产生问题。

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

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

或者这个问题太小,不太可能给小型业余摄影师造成问题?它会被认为是专业知名摄影师的(严重)安全漏洞吗?

非常感谢任何见解! :)

0 个答案:

没有答案