host头攻击
一、问题源起 HTTP1.1规范中在增加了HOST头信息,用于存储服务端与客户端的路由信息。 例如: Request的Header里就有一个标名请求,它是用来记录服务端网站域名的。 如果前端或者后台正好用到这个值,比如jsp的 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort(); 那么黑客就可以通过修改HOST里域名值以达到攻击的目的。 比如request.getServerName()改成:www.baidu1.com,这样页面内引用后请求就会被转接了。 二、解决思路 主要解决方案主要分为两个: 1、不用HOST头的东西 2、防止“敌方”篡改这部分信息 3、使用加密等手段,使得篡改成本高到无以复加 三、解决方案 1、nginx代理强制指定header内容,例如: // nginx修改ngnix.conf文件 server { ... server_name www.abc.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;