---
Nginx是一个广泛使用的Web服务器,它默认以CGI的方式支持PHP解析。这种配置方式下,Nginx通过正则匹配设置SCRIPT_FILENAME。然而,这种配置方式可能存在一个安全漏洞,即当访问一个不存在的PHP文件时,Nginx可能会将这个请求错误地解析为一个静态文件,如jpg、css或js文件。如果这些静态文件中包含恶意PHP代码,那么这些代码可能会被Nginx当作PHP脚本执行,从而导致安全问题。
漏洞危害:
这种配置不当可能导致其他非PHP文件被当作PHP脚本解析执行。例如,如果用户上传了一个含有恶意PHP代码的图片(即所谓的“WebShell”),那么这个图片可能会被Nginx当作PHP文件解析,从而执行其中的恶意代码。这将使攻击者能够获得服务器的操作权限,进而对服务器和用户数据造成严重威胁。
修复方案:
为了解决这个问题,可以采取以下两种方案之一:
方案一:修改PHP配置文件php.ini,将cgi.fix_pathinfo的值设置为0。完成修改后,请重启PHP和Nginx(在IIS环境中,可能还需要重启IIS服务)。
方案二:在Nginx配置文件中添加以下代码,以防止非PHP文件被当作PHP脚本解析:
nginx
if ( $fastcgi_script_name ~ \..\/.php ) {
return 403;
}
方案一在IIS环境下可能存在一些问题,可能会导致PHP获取某些路径时出现错误。因此,对于IIS用户,建议使用方案二。
另外,对于IIS环境下的用户,还可以通过伪静态来重置访问路径,从而提高安全性。创建一个UTF-8格式的web.config文件,并将以下内容添加到网站的根目录下:
xml
\u003c?xml version=\