阻止上传php脚本执行

时间:2011-12-07 11:51:12

标签: php .htaccess

我有一个系统,用户付费支持,每个用户都有一个文件夹。我的网站上有很多(比如200+)子文件夹,每个都需要CSS,图像,JS等......

我还为新用户注册时每周创建文件夹,每个用户都可以上传PHP脚本或JS脚本或图像。 (他们问题的截图)

我的问题是:在我的/.htacess中,我有一条规则检查PHP脚本并重定向到正确的页面,例如site.com/user/page将转到site.com/user/page.php

我想要做的是阻止用户破坏系统,例如:

site.com/user/upload/test将转到他的test.php并运行它。

如何防止这类攻击?

5 个答案:

答案 0 :(得分:20)

阻止访问htaccess中的PHP文件,将此文件放在要阻止文件的文件夹中:

<Files ^(*.php|*.phps)>
    order deny,allow
    deny from all
</Files>

或者在root .htaccess文件中,您可以:

<Directory ^user/upload>
    <Files ^(*.php|*.phps)>
        order deny,allow
        deny from all
    </Files>
</Directory>

即使使用了mod_rewrite,也会阻止访问user / upload文件夹中的所有php文件。

但是,如果你想让.php文件可供下载而不想让它们执行,你可以在.htaccess上使用它:

<FilesMatch "(.+)$">
    ForceType text/plain
</FilesMatch>

文件夹中的所有文件都将返回text/plain。您可以在Directory标记中绑定它以从第二个示例获得类似的拒绝访问结果。

您还可以选择要传递的文件扩展名为text/plain

<FilesMatch "\.(php|pl|py|jsp|asp|htm|shtml|sh|cgi.+)$">
    ForceType text/plain
</FilesMatch>

答案 1 :(得分:2)

请记住,Apache可能有更多扩展来处理PHP类型处理程序,它确实有。这是.htaccess内容,适用于我们的服务器。

<FilesMatch "(?i)\.(php5|php4|php|php3|php2|phtml|pl|py|jsp|asp|htm|shtml|sh|cgi)$">
    ForceType text/plain
</FilesMatch>

它对我们来说很好。

答案 2 :(得分:1)

  

我的问题是:在我的/.htacess中,我有一条规则检查PHP脚本并重定向到正确的页面,例如site.com/user/page将转到site.com/user/page.php

为什么不将用户页面创建为site.com/user/page/index.php?

  

site.com/user/upload/test将转到他的test.php并运行它

然后你的重写规则是错误的 - 但你没有告诉我们它是什么。您处理文件上传的代码也是错误的 - 而且不仅仅是PHP问题 - 您可能会充当各种恶意软件的骡子站点。

当允许用户上传内容时,您应该从不以可以由网络服务器直接寻址的方式存储它(除非是非常大的特定和VERIFIED文件类型的文件 - 例如作为视频)。所有访问都应该由控制脚本调解(可以设置它所引导的内容的mime类型和文件名。)

答案 3 :(得分:0)

好吧,在你重定向到test.php之前我有一个想法,你重定向到一个页面,它将验证代码属于X用户,如果已分配,则遵循例程并重定向,如果你不属于,则触发404

答案 4 :(得分:0)

对不起,我误解了这个问题。 我认为防止这些攻击发生的最佳方法是将文件保存为.php.txt或其他东西,因此它是不可执行的。

但是可以通过f_open();file_get_contents();

打印出文件的内容

如果这不是您想要的,您能否准确地提供有关您的网站的信息?