关于漏洞原理参见 nginx文件类型错误解析漏洞
,最开始是直接把php.ini中设置 cgi.fix_pathinfo = 0想一劳永逸解决。不过后来发现其导致PHP的超全局变量 $_SERVER['PHP_SELF']为空于是有些程序会出错(比如Discuz会拼接出错误图片头像路径)。于是考虑在保持 cgi.fix_pathinfo =1时如何避免漏洞。
网上搜索到的解决办法挺多比如 再提供一种解决Nginx文件类型错误解析漏洞的方法
,因为 ifisEvil
加上正则判断存在漏判问题,所以尝试使用其他方式解决。
经过试验找到一个终极解决办法,用try_files替代if判断文件
try_files $fastcgi_script_name =404;
debug日志中会有类似判断
*308 trying to use file: "/robots.txt/a.php" "/var/htdoc/mychery.net/robots.txt/a.php"
之前在网上搜索到一个办法,经过测试是无效的
try_files $request_filename =404; #无效的用法!
debug日志如下,判断路径重复拼接是错误的
*339 trying to use file: "/var/htdoc/mychery.net/robots.txt/a.php" "/var/htdoc/mychery.net/var/htdoc/mychery.net/robots.txt/a.php"
可以把正确的判断命令加入到fastcgi.conf中:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
try_files $fastcgi_script_name =404;
然后在location中引用它:
location ~ \.php$ {
fastcgi_pass unix:/tmp/phpfpm/php-fpm.sock;
include fastcgi.conf;
}
另外,nginx官方推荐使用try_files替代if相应功能。
分享到:
相关推荐
解决 "No input file specified" 错误需要从多方面进行设置和调整,包括 cgi.fix_pathinfo 参数的设置、Nginx 配置文件的设置、SCRIPT_FILENAME 变量的设置和权限设置。只有通过正确的设置和调整,才能彻底解决 "No ...
1.nginx.conf配置listen端口(默认和iis 80冲突) 2.php里php.ini要去掉分号 ;cgi.fix_pathinfo=1 3.修改start_nginx.bat路径 4.运行start_nginx.bat开启nginx服务 5.运行 stop_nginx.bat关闭nginx服务
1. 在php.ini文件中添加cgi.fix_pathinfo=1和doc_root配置项。 2. 在Nginx配置文件中添加fastcgi_param SCRIPT_FILENAME配置项,例如: ``` location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index ...
- 将`cgi.fix_pathinfo=0`更改为`cgi.fix_pathinfo=1`。此设置可以确保当PHP接收到一个不完整的路径时,能够尝试根据Nginx传递的信息找到正确的文件。 - 将`;cgi.force_redirect=1`更改为`cgi.force_redirect=0`。...
当cgi.fix_pathinfo设置为1时,PHP会尝试解析PATH_INFO信息;设置为0时,则只返回 SCRIPT_FILENAME 而不返回PATH_INFO信息。在Nginx环境中,通常需要设置cgi.fix_pathinfo=1来使得PHP能够返回正确的PATH_INFO信息。 ...
**Nginx解析漏洞**是指当一个文件名后跟任意字符(如"/任意文件名.php")时,Nginx可能会错误地将非PHP文件解析为PHP文件。例如,如果有一个名为"nginx.jpg"的文件,攻击者可以将其修改为"nginx.jpg/x.php",使得...
- 修改`php.ini`配置文件,确保`cgi.fix_pathinfo=0`,这可以提高安全性。 - 启用`extension_dir`,设置为PHP扩展库的位置,如:`extension_dir = "C:\php\ext"`。 - 根据需要启用或禁用PHP扩展,例如`extension=...
- 设置`cgi.fix_pathinfo`为1。 ```ini cgi.fix_pathinfo=1 ``` #### 四、Nginx安装与配置 1. **解压Nginx安装包** - 解压至指定目录,如`D:\wnmp\nginx`。 2. **配置nginx.conf** - 修改站点根目录路径。...
这通常是由于php.ini中的配置错误,例如`cgi.fix_pathinfo`和`doc_root`设置不当。确保这两个值正确无误,并根据实际情况为每个虚拟主机设置正确的目录路径。同时,Nginx的FastCGI配置中,`SCRIPT_FILENAME`变量应与...
在PHP配置中,确保`cgi.fix_pathinfo=1`并且`doc_root`设置正确,以避免“No input file specified.”的错误。同时,Nginx中的FastCGI配置也需要确保`SCRIPT_FILENAME`变量指向正确的PHP脚本路径,例如: ```nginx ...
2. **配置PHP-FPM**:安装完成后,配置PHP FastCGI Process Manager (PHP-FPM),编辑 "php.ini" 文件,启用并配置 "cgi.fix_pathinfo=1"。 3. **启动PHP-CGI**:在命令行中,通过 ...
将服务器名称添加到/ etc / hosts 例子 127.0.0.1 example-server.dev然后编辑php.ini文件 cgi.fix_pathinfo = 0 ; 准备路径示例/主页/ ayatmaulana /示例然后运行easyNginx.php文件 php easyNginx.php 填充*服务器...
在php.ini中,确保`cgi.fix_pathinfo=1`,或者在php-fpm的配置文件中设置相应的环境变量。 总结来说,这个Nginx配置示例展示了如何在不显示index.php的情况下处理PHP请求,并启用Pathinfo模式。在实际应用中,根据...
cgi.fix_pathinfo=1 doc_root= ``` - 注意:`doc_root`应根据实际情况填写。 2. **配置Nginx**: - 编辑Nginx配置文件(通常位于`/etc/nginx/sites-available/default`)。 - 修改`location`块内的配置,确保`...
# NOTE: You should have "cgi.fix_pathinfo=0;" in php.ini # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php;...
- `cgi.fix_pathinfo=1` (非常重要) 3. **启动 PHP-FastCGI 服务器** - 可以通过命令行运行 `php-cgi.exe -b 127.0.0.1:9000 -c php.ini` 来启动 PHP-FastCGI 服务器。 - 如果希望命令行窗口不显示,可以...
- 编辑`php.ini`配置文件,开启FastCGI支持,并配置`cgi.fix_pathinfo=0`以提高安全性。 - 配置`php-cgi.exe`监听9000端口,可以使用`RunHiddenConsole`工具后台运行。 4. **启动和测试**: - 启动Nginx服务,...