我有一个系统,用户付费支持,每个用户都有一个文件夹。我的网站上有很多(比如200+)子文件夹,每个都需要CSS,图像,JS等......
我还为新用户注册时每周创建文件夹,每个用户都可以上传PHP脚本或JS脚本或图像。 (他们问题的截图)
我的问题是:在我的/.htacess
中,我有一条规则检查PHP脚本并重定向到正确的页面,例如site.com/user/page
将转到site.com/user/page.php
我想要做的是阻止用户破坏系统,例如:
site.com/user/upload/test
将转到他的test.php
并运行它。
如何防止这类攻击?
答案 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();
如果这不是您想要的,您能否准确地提供有关您的网站的信息?