一、问题源起

  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;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    ...
  }

 

2、Apache,修改httpd.conf文件,指定ServerName,并开启UseCanonicalName选项。

3、Tomcat,修改server.xml文件,配置Host的name属性。

参考来源:

https://blog.csdn.net/u012903926/article/details/81702224

https://www.jianshu.com/p/690acbf9f321

最新文章

  1. Appium_Python_Api文档
  2. 深入理解JavaScript运行机制
  3. 由项目中一个hash2int函数引发的思考
  4. [LeetCode] Scramble String(树的问题最易用递归)
  5. 转:Python itertools模块
  6. linux 查看程序是否运行
  7. HDU 2577 How to Type【DP】
  8. LeetCode (10): Regular Expression Matching [HARD]
  9. http常见错误
  10. proxy set 拦截
  11. MYSQL 备份用户权限
  12. TCP连接状态具体解释
  13. 简易 HTTP Server 实现(JAVA)
  14. LINUX 常用命令(一)
  15. day21-22Redis Mahout
  16. python threading模块
  17. DeDeCMS(织梦)变量覆盖0day getshell
  18. [udemy]WebDevelopment_Bootstrap,Templates
  19. 全球顶尖大学的UX课程资源,英文!
  20. 移动端H5页面解决软件键盘把页面顶起

热门文章

  1. toast简介
  2. CentOS 7.9 环境下添加拥有 sudo 权限的用户
  3. float高度塌陷和BFC
  4. 2022-03-02 关于 react-native 如何使用 react-native-image-crop-picker
  5. python3.7安装Anaconda3+tensorflow2.1中遇到的问题
  6. 《Makefile中基本字符串替换函数与处理函数的使用参考》
  7. ASPNETCORE托管/部署到WindowService的问题[服务显示正在启动]
  8. postgresql添加系统表报错
  9. Qt 字符串相等判断问题
  10. 批量修改excel中超链接