[英]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.