如何在没有显式链接的情况下访问文件?

时间:2013-01-28 13:44:01

标签: php file .htaccess permissions

我在服务器中发现有些文件存储在webroot中,例如

example.com/files/longnamewithcode_1234293182391823212313231230812.pdf

它们是为网络应用程序存储的,并且有关于它们的明智信息。

如果您访问example.com/files,则会显示空index.html,因此无法直接扫描目录。无论如何,我对此感到担心:我觉得它不安全,我想知道可以对访问文件进行何种攻击。我知道有些暴力攻击是可能的,但是使用长代码名称,我想这是一个不太大的问题。

最后,我会说正确的方法是将文件存储在Web文件夹之外并使用PHP返回它们,但我不确定我是否能够访问代码来更改它。

4 个答案:

答案 0 :(得分:1)

如果您必须通过网络服务器从webroot访问这些文件,那么除了在文件名中使用足够数量的熵之外,您无法真正使其更安全,但这仍然不能简单地共享用户的链接以某种方式抓住他们。

如果你想在php中实现权限检查,请查看热门网络服务器上的各种X-Sendfile实现,如mod_xsendfile(apache),XSendfile(nginx)或{{ 3}}(lighttpd)。这使您可以使用Web服务器提供文件的效率基本上与在验证访问用户后从webroot访问文件一样有效。

答案 1 :(得分:0)

您是否考虑过.htaccess文件来限制允许谁访问这些敏感文件?你标记了它,但我不确定你为什么不使用它。 =)

答案 2 :(得分:0)

如果您希望阻止文件夹中的所有内容,可以使用.htaccess文件来阻止所有连接。

尝试

deny from all

在该目录中的.htaccess文件中。这将拒绝对该目录中任何内容的访问,包括索引文件。

答案 3 :(得分:0)

问题是

  

文件应该由用户自由访问吗?

如果是,请不要过多担心这些文件(只要它们不可写)。

如果不是,即用户必须登录才能下载它们,请将它们从可公开访问的文件夹中移出并深入到应用程序中。编写一个php脚本来管理文件的权限,即/download?file_id=1