在系统经历安全漏扫时,可能会出现host注入的问题。
如上图中,我们的IP地址假设为192.168.1.32,安全测试时,拦截下来向1.32服务器的请求,将host更改为www.baidu.com后,放行请求,发现去其他服务器进行请求。
其问题主要原因是安全配置错误,导致生成的链接地址不是正确的地址,而攻击者设定的地址,从而使用户访问了恶意网站。
如果我们使用nginx中间件,则可以在nginx配置文件(nginx.conf)中,加入判断
加入内容如下:
set $flag "";
if ($http_Host != '192.168.1.32:8087')
{
set $flag "1";
}
if ($http_Host != '160.27.46.85:8087')
{
set $flag "${flag}1";
}
if ($flag = "11") {
return 403;
}
上述代码的意思是,如果请求的host不是这两个地址发来的,最终会返回403错误信息,而不会请求到更改后的服务器IP。
上述代码加入的位置:如下图中的server中
user root;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#连接存活超时时间,默认为65s,如果下面需要修改,这个时候一定要与之相同或更大
keepalive_timeout 10m;
#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 600s;
#后端服务器数据回传时间(代理发送超时)
proxy_send_timeout 600s;
#连接成功后,后端服务器响应时间(代理接收超时)
proxy_read_timeout 600s;
#指定nginx与后端fastcgi server连接超时时间
fastcgi_connect_timeout 600s;
#指定nginx向后端传送请求超时时间(指已完成两次握手后向fastcgi传送请求超时时间)
fastcgi_send_timeout 600s;
#指定nginx向后端传送响应超时时间(指已完成两次握手后向fastcgi传送响应超时时间)
fastcgi_read_timeout 600s;
#gzip on;
server {
listen 8086;
server_name 192.168.1.32;
set $flag "";
if ($http_Host != '192.168.1.32:8086')
{
set $flag "1";
}
if ($http_Host != '160.27.46.85:8086')
{
set $flag "${flag}1";
}
if ($flag = "11") {
return 403;
}
root /home/web;
}
server {
charset utf-8;
client_max_body_size 128M;
listen 8087; ## listen for ipv4
#listen [::]:80 default_server ipv6only=on; ## listen for ipv6
server_name 192.168.1.32;
set $flag "";
if ($http_Host != '192.168.1.32:8087')
{
set $flag "1";
}
if ($http_Host != '160.27.46.85:8087')
{
set $flag "${flag}1";
}
if ($flag = "11") {
return 403;
}
root /home/web;
index index.php;
}
}