繁体   English   中英

阻止上传php脚本执行

[英]prevent upload php script to be executed

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

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

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

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

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

我怎样才能防止这种攻击呢?

阻止访问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>

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

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

它对我们来说很好。

我的问题是:在我的/.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类型和文件名)。

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

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

但是通过f_open();打印出文件的内容f_open(); file_get_contents();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM