/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
使用 PHP 没有问题(例如https://stackoverflow.com/questions/2187200/using-php-apache-to-restrict-access-to-static-files-html-css-img-etc)。
但如果你不想使用它,你可以查阅相关问题的答案:https://stackoverflow.com/questions/6325712/deny-direct-access-of-file-except-server-localhost和https://stackoverflow.com/questions/12299556/restrict-html-files-access。
答案2
按照您所建议的方式使用短期 URL 存在许多安全问题。
URL 和文件将被缓存在代理和用户的计算机上。
浏览器工具栏(尤其是由运行爬虫程序的公司提供的工具栏,例如 Alexa、Google、Netcraft、Yahoo 等)可以将 URL 报告回其母公司,以指示机器人应该来抓取该 URL。
如果您不使用 SSL,则 URL 和文件内容很容易被网络路径上的任何人获取。这通常包括与用户使用同一共享 Wifi 连接的任何人,而且由于免费、开放的 Wifi 越来越普遍,这种情况很可能会发生。
您的短期 URL 并不够短。如果用户每天只登录一次,则 URL 泄露给的任何人都有 24 小时的时间来检索它。
如果 URL 中的长字符串是用户的会话标识符,则它很可能会以与上述 URL 相同的方式泄露信息,但会话 ID 更为敏感。知道会话标识符允许攻击者劫持会话。这就是 Firesheep 扩展的工作原理。通过这种方式尝试保密图像,您实际上会让您的用户面临更大的风险。
使用正常方法饼干存储会话标识符可防止缓存和浏览器工具栏泄漏。使用SSL防止网络嗅探和一些缓存。使用标准 HTTP 认证使用其中一个 Apache 身份验证模块可以让您避免使用 PHP。