x
nginx介绍
tomcat在内网里,当我们不想把tomcat端口直接对外网开放,就在前边放一个nginx。
用户浏览器访问公网80/443端口,经过nginx服务器,做一个内网转发,转发到tomcat8080端口
nginx如何解析php
浏览器发起请求到nginx,nginx通过FastCGI协议调用PHP-FPM
1 | server{ |
FastCGI(commen gateway interface)是一种WEB服务器和后端程序通信的协议
Nginx本身不能直接执行php代码,Nginx把php请求交给PHP-FPM,FastCGI相较于传统的CGI会让后端程序常驻内存,多个请求可以复用这些流程,更适合高并发网站
1
2
3
4
5 location ~ \.php${
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}//凡是访问.php文件的请求,都交给9000上的PHP-FPM处理PHP-FPM(FastCGI Process Manager)是专门用来运行PHP程序的进程管理器
CGI又通过Wrapper调用PHP代码
Wrapper是包装器或封装层
1
2 def add(a,b):
return a+b
1
2
3
4
5 def add_wapper(a,b):
print("begin counting")
result = add(a,b)
print("end counting")
return result在php里叫流封装器
1
2
3 file_get_contents("http://example.com");
file_get_contents("php://input");
file_get_contents("file:///var/www/a.txt");
1
2
3 http://
php://
file://都可以理解为不同类型的Wrapper,让PHP知道应该用什么方式读取这个资源,file表示从本地文件系统读取,http表示从http请求读取,input表示读取http请求体,php://filter → 带过滤器读取资源
1
2 include($_GET["page"]);
//传入?page=php://filter/convert.base64-encode/resource=config.php
正向代理代理客户端,反向代理代理服务器
CVE2013-4547文件名逻辑漏洞
版本:0.8.41-1.4.3/1.5.0-1.5.7
绕过服务器策略,上传webshell
访问shell.gif[0x20][0x00]。以.php结尾的文件被fastcgi接收,fastcgi读取文件名的时候被00截断,配合php-fpm.conf中的limit_extensions为空即可利用成功
CVE2017-7529越界读取缓存漏洞
版本:0.5.6-1.13.2
http头部表达方式
1 | Range: bytes=0-1024 |
http Response
1 | Accept-Ranges: bytes |
缓存
如有错误,多多指教