使用request.getServerName() 可能被操纵 容易产生跨站漏洞(检测到目标URL存在http host头攻击漏洞)

本文主旨总结:使用request.getServerName()的请注意  这个方法的数据来源是不可信的可能被操纵 容易产生跨站漏洞

作为一个快乐的补锅匠,这次补锅是真的快乐,因为解除了一个拿到手一脸懵逼,然后慢慢了解的一块内容:安全漏洞。当然是绿盟扫描出来的了。废话不多话,讲重点。

首先绿盟扫描出来的漏洞是这样的:检测到目标URL存在http host头攻击漏洞

如下图:

大概意思就是如果人家改了下host,就可以调到人家指定的网址了(浅入理解,大神看到一定要指点我下。)

比如这样:curl -H 'Host:www.zujuge.com' http://127.0.0.1:8080/import

得到的就是一个跳转页面,因为这个import不存在啊。而跳转页面包含如下代码

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
System.out.println(request.getScheme());
System.out.println(request.getServerName());
System.out.println(request.getServerPort());
%>

<script type="text/javascript">
      window.top.location.href="<%=basePath %>login.jsp";
</script>

也就是说request.getServerName()获取了密令访问时候塞的host值,所以导致跳转到不属于本服务的网站。

解决方法简单,直接把<%=basePath %>换成<%=path %>

这个挺有意思的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值