1

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

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

实际的文件夹位置是uploads/,我正在使用类似如何隐藏实际文件夹位置的东西

现在我想使用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/在此 url 中显示上传目录。所以我使用module_rewrite将目录名称更改为myfiles/.

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

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

4

2 回答 2

1

不要将文件放在网络可访问的位置。将它保存在 www 根目录之外的某个地方,并有一个脚本来打开、读取文件并将其输出到浏览器。

这样即使是php文件,也只有内容会被下发,不会被执行。

于 2012-10-03T11:42:07.583 回答
1

重写 url 来隐藏路径是没有用的。

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

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

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

检查上传的内容。防止这些东西在您的服务器上执行。

当谈到使用这里讨论的 URL 时,情况应该是这样的:

如果不重写你会引用/uploads/example.pdf,使用重写应该将此 url 转换为其他内容,并禁用原始 url!如果您仍然可以通过上传文件夹获取内容,那么您的重写是错误的。

如果它是正确的,你就不需要使用旧的上传 url,因为它不再起作用了。

于 2012-10-03T11:42:30.043 回答