如何隐藏实际的下载文件夹位置

时间:2012-10-03 11:31:48

标签: php security mod-rewrite

我心中有一个问题,mod_rewrite如何提高安全性。

我有一个我的php文件,它在线显示.pdf文件,如www.exaple.com?id=234,它会查询数据库并获取实际的文件夹位置。

实际文件夹位置为uploads/,我使用的是how to hide the actual folder location

现在我想使用google docs

 echo "<iframe src=\"http://docs.google.com/gview?url=".root."uploads/myfile.pdf"."&embedded=true\" style=\"width:100%; height:100%;\" frameborder=\"0\"></iframe>

但我不想在此网址中显示上传目录uploads/。因此,我使用module_rewrite将目录名称更改为myfiles/

问题是,当用户将目录更改为www.example.com/myfiles/hacking.php时,它也会重写为uploads/hacking.php

我允许用户上传文件。尽管我使用黑名单,但我们认为可能存在安全漏洞

2 个答案:

答案 0 :(得分:1)

请勿将文件放在可从Web访问的位置。将它保存在www根目录之外,并有一个脚本来打开,读取文件并将其输出到浏览器。

这样,即使它是一个php文件,也只会发送内容并且不会被执行。

答案 1 :(得分:1)

重写网址以隐藏路径是没用的。

最后,您有一个用户可以使用的网址。请求将向他发送资源。如果他请求example.com/?fileid=123而不是example.com/uploads/file123.ext?

,差异何在

是的,将参数放入参数会强制您使用脚本来获取和发送资源。使用看起来像路径的东西只允许您使用此脚本。但它可以使用,而这一切都不会提高安全性。不使用脚本意味着无法检查是否允许请求资源的用户,但对于公共资源,这不是问题。

你真的想做什么?您的安全问题是检查是否上传了恶意内容?如果您允许上传可执行文件,并允许执行它们,那么您将注定失败。重写任何URL都没有任何帮助。

检查上传的内容。防止在您的服务器上执行此操作。

在使用此处讨论的URL时,情况应如下所示:

如果没有重写,你会引用/uploads/example.pdf,使用重写应该将此网址转换为其他内容,并禁用原始网址!如果您仍然可以通过uploads文件夹获取内容,则重写错误。

如果它是正确的,您无需使用旧的上传网址,因为它不再有效。