3 || 4-黑名单绕过
实际上,一个扩展名能否当作 PHP 执行,完全取决于 Web 服务器(如 Apache、Nginx)的配置。
默认情况下,Apache 只解析 .php 。要让 .php3、.phtml 等后缀也生效,需要修改配置
修改方法
第一种
在大多数Linux环境的教程里,.htaccess中的这两行常规配置是没问题的:
AddType application/x-httpd-php .php3 .phtml
AddHandler application/x-httpd-php .php3 .phtml
这两条命令的作用,是告诉Apache把这类文件交给mod_php这个内部模块来处理。
第二种
但在你使用的Windows + phpStudy + FastCGI + NTS PHP的环境里,压根就没有mod_php模块。它的工作方式是把PHP的解析请求转给另一个程序去执行,所以上面的指令自然就没用了
php
<FilesMatch ".+">
SetHandler fcgid-script
FcgidWrapper "D:/path/to/your/php-cgi.exe" .php3 .phtml
</FilesMatch>
.+:匹配目录下的所有文件名。
FcgidWrapper:指定了处理PHP的php-cgi.exe程序的绝对路径,以及哪些后缀需要使用这个规则。
你需要在phpStudy里找到你当前正在用的那个PHP版本的目录,然后把路径替换成你自己的。
------------------------------------------------------------------------------------
<FilesMatch "\.(php3|phtml)$">
SetHandler fcgid-script
FcgidWrapper "D:/path/to/your/php-cgi.exe"
</FilesMatch>
AddType application/x-httpd-php-source .php3 .phtml
这种方法只针对.php3和.phtml文件生效,更为精准,并附带类型声明。
将FcgidWrapper后面引号里的路径,换成刚才找到的php-cgi.exe的绝对路径。保存.htaccess文件后,无需重启Apache,配置就会立刻生效。
php
[
"php",
"php3",
"php4",
"php5",
"phtml",
"php6",
"php7",
"phpt",
"phtm",
"inc",
"class",
"module",
"php.jpg",
"php.png",
"php.gif",
"php:1.jpg",
"php.;jpg",
"php::$data",
"php%0a.jpg",
"php/.",
"Php",
"pHp",
"pHP",
"Phtml"
]