我在我的服务器中发现,一些文件存储在webroot中,例如
example.com/files/longnamewithcode_1234293182391823212313231230812.pdf
它们被存储为一个网络应用程序,并提供有关它们的明智信息。
如果您访问example.com/files
则会得到一个空index.html
,因此您无法直接扫描目录。无论如何,我对此感到担忧:我觉得它不安全,我想知道可以进行什么样的攻击来访问文件。我知道一些蛮力攻击是可能的,但是对于长代号,我想这是一个不那么大的问题。
最后,我会说正确的方法是将文件存储在 web 文件夹之外并使用 PHP 返回它们,但我不确定我是否能够访问代码来更改它。
如果你必须让网络服务器从webroot访问文件,你不能让它比在文件名中使用足够数量的熵更安全,但这仍然不能简单地分享一个链接由以某种方式掌握它们的用户。
如果你想在php中实现权限检查,请查看流行的Web服务器上的各种X-Sendfile
实现,如mod_xsendfile(apache),XSendfile(nginx)或X-LIGHTTPD-send-file(lighttpd)。这允许您使用 Web 服务器来提供文件,基本上与在验证访问用户后从 webroot 访问文件一样高效。
您是否考虑过使用.htaccess文件来限制允许谁访问这些明智的文件? 你标记了它,但我不确定你为什么不使用它。 =)
阻止文件夹中的所有内容,可以使用.htaccess文件阻止所有连接。
尝试
deny from all
在该目录的 .htaccess 文件中。这将拒绝对该目录中任何内容(包括索引文件)的所有访问。
问题是
用户是否应该自由访问文件?
如果是,请不要太担心这些文件(只要它们不可写)。
如果没有,即用户必须登录才能下载它们,将它们从可公开访问的文件夹中移出并更深入地进入应用程序。编写一个 php 脚本来管理文件的权限,即 /download?file_id=1
.