限制访问服务器上的图像:php,htaccess或其他?

时间:2014-02-19 13:42:21

标签: php image .htaccess mod-rewrite redirect

我正在构建一个图像服务器来处理和交付公司图像。我的目标是建立一个系统,可以接收图像(来自ftp或应用程序),调整大小/水印,并使它们可用于社交媒体或内部使用(有很好的短网址。)

我遇到的问题涉及限制访问。每个图像分配一个8位数的代码。 htaccess文件旨在返回正确的图像,以便:

mysite.com/84375635成为mysite.com/images/84375635.png

这允许任何人访问任何图像。我想根据存储在数据库或文件中的要求设置一个限制特定图像的系统。我想到了可能的解决方案:

  • 使用php在上传图片时重写htaccess文件。
  • 使用php接收图像请求,然后根据数据库中的限制重定向。

哪个是更好的选择(还是有一个我还不知道的?)

我希望系统的这个元素尽可能快速和低内存。

2 个答案:

答案 0 :(得分:2)

绝对使用PHP处理图像请求,并在该脚本中查询数据库。

永远不要使用每个请求的PHP重写.htaccess个文件。这可能甚至不起作用,访问规则将在PHP脚本执行之前解析,而不是在之后。

如果数据库服务器在localhost上运行,则此脚本导致的开销可以忽略不计,关于时间和内存消耗。


如果限制完全基于允许访问文件的IP范围和不允许访问文件的IP范围,则您还可以在上传图像时重写访问规则。 请注意,这还取决于您计划上传的图像数量:如果它只是少数则不是问题 - 但在.htaccess文件中拥有数十万个规则肯定是您不应该做的事情(基于PHP的图像服务脚本与数据库结合使用不仅更快,而且更安全。

尽管此解决方案需要的资源略少,但它的可扩展性也较低(例如,当您想要添加更多限制而不仅仅是IP时)。请记住,删除图像时也要删除条目。

答案 1 :(得分:1)

你真的不应该用PHP重写你的htaccess文件 - 这会在某些时候爆炸。

  

mysite.com/84375635成为mysite.com/images/84375635.png

为什么不使用DirectoryIndex选择文件 - 为每个图像设置一个唯一的目录,然后在配置中添加以下内容:

DirectoryIndex index.html index.php index.png

然后您只需将文件作为'index.png'放入,如果您以后想要添加更复杂的访问控制,请将图像重命名为.htimg.png并放入index.php以调解对文件。

这种方法的缺点是你需要允许在与文件上传相同的目录树中执行PHP - 这对安全性有害,因此更好的解决方案是将图像文件重命名为'.htimg.png'然后通过404处理程序调解访问。

您目前允许通过FTP上传文件 - 这会产生确保一致命名行为的问题(并且FTP是维护,自动化和安全的主要PITA)。我建议放弃这个。