如何保护正在执行的上传文件夹中的文件

时间:2011-02-15 22:21:44

标签: php .htaccess security

我有一个上传文件夹,用户可以上传任何内容,允许所有文件类型......

但是,有一个问题......

如果用户上传.php文件,该文件将不会被提供下载,它将被执行,因此如果用户上传危险的php文件,即删除文件夹,或浏览或显示安全数据,它将会执行那么,任何人都可以访问服务器...

如何保护该文件夹中的执行?

我尝试使用CHMOD 755获取该文件夹,但无法上传文件......

有没有办法保护这个没有PHP脚本或文件类型检查上传或其他东西,只是为了阻止在该特定文件夹中执行...

也许用.htaccess或其他什么?

谢谢...

4 个答案:

答案 0 :(得分:4)

将目录放在public www-scope之外,并使用脚本使用file_get_contents或类似文件获取文件。

答案 1 :(得分:3)

我的第一个倾向是说“不要那样做!”。

但是如果必须出于某种原因这样做:将文件上传到Apache无法访问的目录中。然后编写一个读取文件并输出其内容的脚本。

恕我直言,这仍然是一个坏主意。这并不妨碍某人使用Javascript向其他用户做各种令人讨厌的事情。

修改 根据你的评论,我在答案中添加了一些内容:

你必须记住,在网络上有多层“执行”,实际上它被解释了,但我不会争论语义。如果Apache为您的文件服务并且它被设计为由Apache解释,那么Apache将对其进行解释(通常是脚本语言,如PHP)。如果您下载了一个旨在由浏览器解释的文件(HTML,Javascript,CSS),它将由浏览器和所有与之相关的程序进行解释。

如果您无法使用脚本来读取文件(这只会阻止Apache对其执行某些操作),您可以让您的上传程序ZIP文件。这样,它总是以正确的格式下载。

答案 2 :(得分:2)

将它放在文件夹的.htaccess中以禁用PHP:

php_flag engine off

如果您使用的是FastCGI mod_php

RemoveHandler .php

答案 3 :(得分:0)

为什么不过滤php文件?你真的需要你的用户上传php文件吗?你可以过滤已知的dangerouns扩展。