我在我的脑海的一个问题是如何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.So我使用module_rewrite
的目录名称更改为myfiles/
。
现在的问题是,当用户更改目录www.example.com/myfiles/hacking.php
比它也将重写uploads/hacking.php
。
我允许用户上传files.although我使用的黑名单,但我们认为安全漏洞可能存在
不要将文件放在网络访问的位置。 保持它的某个地方出了www根,并有一个脚本来打开,读取和输出文件到浏览器。
这样一来,即使它是一个PHP文件,只有内容将被发送下来,不会被执行。
重写的URL隐藏的路径是无用的。
最后,你有一个用户可以使用的URL。 请求将送他的资源。 什么区别,如果他要求example.com/?fileid=123
代替example.com/uploads/file123.ext?
是的,把东西在参数强迫你使用脚本来获取和发送资源。 使用的东西,看起来像一个路径只允许你使用这个脚本。 但它可以被使用,并没有什么这提高了安全性。 不使用脚本意味着不能够检查是否请求资源的用户被允许,但对于公共资源,这是没有问题的。
你到底想干什么? 您的安全问题是检查恶意内容是否被上传? 如果允许上传可执行文件,并且还让他们来执行,你注定。 重写任何URL不以任何方式帮助。
检查什么被上传。 从你的服务器上执行防止这种东西。
当涉及到使用这里讨论的URL,情况应该是这样的:
如果不重写你将引用/uploads/example.pdf
,使用重写应该改变这个网址成别的东西, 并禁用原始地址 ! 如果您仍然可以通过上传文件夹中得到的东西,你的重写是错误的。
如果这是正确的,你是不是在任何需要使用旧的URL上传,因为它不工作了。