问题:

为了方便的获得网站域名,开发人员一般依赖于HTTP Host header。例如,在php里用_SERVER[“HTTP_HOST”]。但是这个header是不可信赖的,如果应用程序没有对host header值进行处理,就有可能造成恶意代码的传入。

解决办法:

web应用程序应该使用SERVER_NAME而不是host header。在Apache和Nginx里可以通过设置一个虚拟机来记录所有的非法host header。在Nginx里还可以通过指定一个SERVER_NAME名单,Apache也可以通过指定一个SERVER_NAME名单并开启UseCanonicalName选项。

有一些省级项目,地市访问时ip往往会进行转换,所以我们要把系统实际ip、地市转换ip都加入到server_name里面。

 server {
   	listen 9000  default;
   	server_name  _;
   	location / {
   		return 403; 
   		}
    }
   server {
    listen 9000;
    server_name 127.0.0.1 ip1 ip2 域名 域名映射ip (server_name之间以空格分隔);
    }

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐