`
waiting
  • 浏览: 234786 次
  • 性别: Icon_minigender_1
  • 来自: cq
社区版块
存档分类
最新评论

cgi.fix_pathinfo=1时终极解决Nginx文件类型错误解析漏洞的方法

 
阅读更多

关于漏洞原理参见 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相应功能。

 

 

0
1
分享到:
评论

相关推荐

    nginx提示No input file specified怎么办.docx

    解决 "No input file specified" 错误需要从多方面进行设置和调整,包括 cgi.fix_pathinfo 参数的设置、Nginx 配置文件的设置、SCRIPT_FILENAME 变量的设置和权限设置。只有通过正确的设置和调整,才能彻底解决 "No ...

    nginx-1.8.0程序 适用于windows

    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服务

    提示No input file specified的解决方法.docx

    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 ...

    【LNMP】提示Nginx PHP “No input file specified”错误的解决办法

    - 将`cgi.fix_pathinfo=0`更改为`cgi.fix_pathinfo=1`。此设置可以确保当PHP接收到一个不完整的路径时,能够尝试根据Nginx传递的信息找到正确的文件。 - 将`;cgi.force_redirect=1`更改为`cgi.force_redirect=0`。...

    nginx下支持PATH_INFO的方法实例详解

    当cgi.fix_pathinfo设置为1时,PHP会尝试解析PATH_INFO信息;设置为0时,则只返回 SCRIPT_FILENAME 而不返回PATH_INFO信息。在Nginx环境中,通常需要设置cgi.fix_pathinfo=1来使得PHP能够返回正确的PATH_INFO信息。 ...

    信息安全技术基础:利用Nginx漏洞上传.pptx

    **Nginx解析漏洞**是指当一个文件名后跟任意字符(如"/任意文件名.php")时,Nginx可能会错误地将非PHP文件解析为PHP文件。例如,如果有一个名为"nginx.jpg"的文件,攻击者可以将其修改为"nginx.jpg/x.php",使得...

    Windows下Nginx和php-cgi的bat批处理快速启动方法

    - 修改`php.ini`配置文件,确保`cgi.fix_pathinfo=0`,这可以提高安全性。 - 启用`extension_dir`,设置为PHP扩展库的位置,如:`extension_dir = "C:\php\ext"`。 - 根据需要启用或禁用PHP扩展,例如`extension=...

    W7下的nginx+php配置

    - 设置`cgi.fix_pathinfo`为1。 ```ini cgi.fix_pathinfo=1 ``` #### 四、Nginx安装与配置 1. **解压Nginx安装包** - 解压至指定目录,如`D:\wnmp\nginx`。 2. **配置nginx.conf** - 修改站点根目录路径。...

    varnish服务器[参考].pdf

    这通常是由于php.ini中的配置错误,例如`cgi.fix_pathinfo`和`doc_root`设置不当。确保这两个值正确无误,并根据实际情况为每个虚拟主机设置正确的目录路径。同时,Nginx的FastCGI配置中,`SCRIPT_FILENAME`变量应与...

    varnish服务器[借鉴].pdf

    在PHP配置中,确保`cgi.fix_pathinfo=1`并且`doc_root`设置正确,以避免“No input file specified.”的错误。同时,Nginx中的FastCGI配置也需要确保`SCRIPT_FILENAME`变量指向正确的PHP脚本路径,例如: ```nginx ...

    nginx-1.19.1.zip

    2. **配置PHP-FPM**:安装完成后,配置PHP FastCGI Process Manager (PHP-FPM),编辑 "php.ini" 文件,启用并配置 "cgi.fix_pathinfo=1"。 3. **启动PHP-CGI**:在命令行中,通过 ...

    Easy-Nginx-VHostMaker::high_voltage:Nginx虚拟主机,变得简单!!

    将服务器名称添加到/ etc / hosts 例子 127.0.0.1 example-server.dev然后编辑php.ini文件 cgi.fix_pathinfo = 0 ; 准备路径示例/主页/ ayatmaulana /示例然后运行easyNginx.php文件 php easyNginx.php 填充*服务器...

    Nginx隐藏index.php和Pathinfo模式配置例子

    在php.ini中,确保`cgi.fix_pathinfo=1`,或者在php-fpm的配置文件中设置相应的环境变量。 总结来说,这个Nginx配置示例展示了如何在不显示index.php的情况下处理PHP请求,并启用Pathinfo模式。在实际应用中,根据...

    电脑提示“No input file specified”怎么办.docx

    cgi.fix_pathinfo=1 doc_root= ``` - 注意:`doc_root`应根据实际情况填写。 2. **配置Nginx**: - 编辑Nginx配置文件(通常位于`/etc/nginx/sites-available/default`)。 - 修改`location`块内的配置,确保`...

    Ubuntu中搭建Nginx、PHP环境最简洁的方法_.docx

    # 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;...

    Windows下nginx+php+mysql安装和配置.docx

    - `cgi.fix_pathinfo=1` (非常重要) 3. **启动 PHP-FastCGI 服务器** - 可以通过命令行运行 `php-cgi.exe -b 127.0.0.1:9000 -c php.ini` 来启动 PHP-FastCGI 服务器。 - 如果希望命令行窗口不显示,可以...

    nginx+php配置环境+源软件包

    - 编辑`php.ini`配置文件,开启FastCGI支持,并配置`cgi.fix_pathinfo=0`以提高安全性。 - 配置`php-cgi.exe`监听9000端口,可以使用`RunHiddenConsole`工具后台运行。 4. **启动和测试**: - 启动Nginx服务,...

Global site tag (gtag.js) - Google Analytics