阻止上载要执行的php脚本

阻止上载要执行的php脚本,php,.htaccess,Php,.htaccess,我有一个系统,用户付费支持,每个用户都有一个文件夹。我有很多(像200+子文件夹ד在我的网站上,每一个都需要CSS,图像,JS等 我还每周为新用户创建文件夹,当他们注册时,每个用户都可以上传PHP脚本或JS脚本或图像。(他们问题的截图) 我的问题是:在我的/.htacess中,我有一条规则检查PHP脚本并重定向到正确的页面,例如site.com/user/page将转到site.com/user/page.PHP 我想做的是防止用户破坏系统,例如: site.com/user/upload/te

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

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

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

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

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


如何防止此类攻击?

好吧,在重定向到test.php之前,我有一个想法,您重定向到一个页面,该页面将验证代码是否属于X用户,如果分配,则按照例程进行重定向,如果您不属于,则触发404

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

但是通过
f_open()打印文件的内容
文件获取内容()

如果这不是你正在寻找的,你能提供关于你的网站做什么的信息吗

我的问题是:在My/.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——您可能充当各种恶意软件的mule站点


当允许用户上传内容时,您应该永远不要以Web服务器可以直接寻址的方式存储内容(可能除了非常特定且经过验证的文件类型的非常大的文件,如视频)。所有访问都应通过控制脚本进行调解(该脚本可设置其频道内容的mime类型和文件名)。

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

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

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

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

强制类型文本/纯文本

这对我们来说很好。

对不起,我不明白你的意思。谢谢你的帮助。关于C文件,上面的文件匹配列表是否完整。我是一个正则表达式,你可以匹配任何你想要的。您的服务器不会通过浏览器执行C文件,它将作为数据文件(下载)交付。如果您谈论的是源代码,您可以拒绝或允许对其进行访问。如果你想让任何文件以文本形式下载,你可以把“(.+)$”作为正则表达式,任何文件,我说的任何文件,在文件夹中都是文本/明文谢谢,那很好,我会使用“(.+)$ThanksJ请注意:如果您试图阻止用户执行php shell,请不要使用此方法!如果有人上载.htaccess文件怎么办?最好只允许您可能使用的扩展名,或者您也可以阻止.htaccess上载,并且在apache 2配置中默认拒绝访问。
<FilesMatch "(.+)$">
    ForceType text/plain
</FilesMatch>
<FilesMatch "\.(php|pl|py|jsp|asp|htm|shtml|sh|cgi.+)$">
    ForceType text/plain
</FilesMatch>
<FilesMatch "(?i)\.(php5|php4|php|php3|php2|phtml|pl|py|jsp|asp|htm|shtml|sh|cgi)$">
    ForceType text/plain
</FilesMatch>