问题:

为了方便的获得网站域名,开发人员一般依赖于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

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐