使用 Apache 和 Session 保护对静态文件的访问

使用 Apache 和 Session 保护对静态文件的访问
/assets
 - file1.mp3
 - file2.mp3
 ...
 - fileX.mp3

(数百万个文件)

因此,我想防止的是,如果用户没有登录,则直接访问内容,例如 http://domain.com/assets/file1.mp3

理想情况下,资产文件的 URL 将在每次用户登录时更改,使用他的会话类似 http://domain.com/assets/51303ca30479c7a79b75373a/file1.mp3

如何执行?因此目标是在重定向到实际二进制文件之前经常更改 URL。

我知道我可以做这样的事

RewriteRule ^(.*\.mp3)$ /path/to/auth.php?i=$1

但是我不喜欢使用 PHP 来处理身份验证。有没有一种使用 apache 的优雅方法来处理此问题?

谢谢,德米特里

答案1

答案2

按照您所建议的方式使用短期 URL 存在许多安全问题。

  • URL 和文件将被缓存在代理和用户的计算机上。

  • 浏览器工具栏(尤其是由运行爬虫程序的公司提供的工具栏,例如 Alexa、Google、Netcraft、Yahoo 等)可以将 URL 报告回其母公司,以指示机器人应该来抓取该 URL。

  • 如果您不使用 SSL,则 URL 和文件内容很容易被网络路径上的任何人获取。这通常包括与用户使用同一共享 Wifi 连接的任何人,而且由于免费、开放的 Wifi 越来越普遍,这种情况很可能会发生。

  • 您的短期 URL 并不够短。如果用户每天只登录一次,则 URL 泄露给的任何人都有 24 小时的时间来检索它。

  • 如果 URL 中的长字符串是用户的会话标识符,则它很可能会以与上述 URL 相同的方式泄露信息,但会话 ID 更为敏感。知道会话标识符允许攻击者劫持会话。这就是 Firesheep 扩展的工作原理。通过这种方式尝试保密图像,您实际上会让您的用户面临更大的风险。

使用正常方法饼干存储会话标识符可防止缓存和浏览器工具栏泄漏。使用SSL防止网络嗅探和一些缓存。使用标准 HTTP 认证使用其中一个 Apache 身份验证模块可以让您避免使用 PHP。

相关内容