签名URL vs通过脚本提供服务图像或文件

时间:2011-05-04 00:39:57

标签: php web-services image security dynamic

签名网址是如下所示的路径,这些是正确的名称吗?

    http://mydomain.tld/<randomhash>.<extension>

它们主要保护对图像的访问,并且通常仅在一定时间内可用。如果您知道路径和文件名,则可以访问。 对于许多webmail和其他Web应用程序而言,这似乎是可接受的用户访问限制,这似乎是一种常见的模式。

或者,您可以通过检查每个请求的访问权限的脚本来提供文件或图像,这允许对每次访问进行跟踪和用户凭据检查,如下所述:Serve image with PHP script vs direct loading an image

所以两者之间的交易就是,在这里我想知道这是完整的还是需要考虑的更多:

  • 签名的网址需要在t
  • 之后生成,提供,丢弃
  • 越长越不安全
  • 道路越短越不安全
  • 即使通过https提供服务,也可以在t
  • 超时期间为任何人提供访问权限
  • 生成后访问

通过php提供服务有以下问题:

  • 每次访问脚本引擎检查用户和服务图像时生成负载,不允许Web服务器直接访问文件路径

一般来说,更好的方法是什么?如果不能说,还应考虑哪些其他观点/问题?

1 个答案:

答案 0 :(得分:0)

使用PHP(或任何其他语言)是一个很好的选择,没有多少开销。我会做什么:

  • 使用具有X-forward功能的Nginx或其他网络服务器(请参阅Apache上的mod_xsendfile
  • 在GET参数中使用哈希无法在https频道上嗅探(例如:http://mydomain.tld/image?hash= <randomhash>
  • 在页面加载PHP可以检查给定的哈希是否正确(即使没有对file_exists进行简单<hash>.png/jpeg/etc.调用的数据库)并使用X-forwarded图像返回所需的标头< / LI>
  • 在一段时间后删除/删除受保护文件夹中不需要的图像