果然是第⑨番,人都有点⑨了
起因是某位大佬要求将waf返回的403状态码在替换成伪造的404页面,以达到隐藏系统的架构特征(bug)巴拉巴拉之类的.
我一听,这个简单,于是在做之前问了下GBT,GBT很快给出了答案
server {
listen 80 ssl;
listen [::]:80 ssl;
server_name domain.com;
location / {
fastcgi_intercept_errors on;
proxy_pass https://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 403 /403.html;
location = /403.html {
root /403.html;
}
}
于是乎你选择相信了GBT,并将上面的配置就这么抄到了 nginx 的配置文件里面去.
sec
:wq
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx -s reload
emmmm,完美,打开业务网页也正常,然后输入个一定会被拦截的注入语句
https://domain.com/?id=1 AND 1=1
咋不是自定义的空白页啊,这不科学
于是乎开始了漫长的google过程,终于在千篇一律教你配置fastcgi_intercept_errors的文章中发现,项目是用nginx做了反向代理的,配置fastcgi_intercept_errors是不生效的,需要配置proxy_intercept_errors才行。
于是乎
server {
listen 80 ssl;
listen [::]:80 ssl;
server_name domain.com;
location / {
#fastcgi_intercept_errors on; #这玩意不生效的
proxy_intercept_errors on;
proxy_pass https://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 403 /403.html;
location = /403.html {
root /403.html;
}
}
终于,在重启完nginx之后,熟悉的自定义报错页出现在了我的面前
本来金曜日想早点下班溜的,结果又是无意义的折腾了一晚上,唉