网站地图    收藏   

主页 > 后端 > 网站安全 >

一个简单XSS攻击示例及处理 - 网站安全 - 自学p

来源:自学PHP网    时间:2015-04-17 10:15 作者: 阅读:

[导读] 最近项目被第三方工具扫描出来有一个Http head xss cross scripting漏洞,为了修复这个,顺便研究了一下跨站脚本攻击的原理, 跨站脚本攻击基本上就是sql注入的html版, 核心内容就是把一段...

最近项目被第三方工具扫描出来有一个Http head xss cross scripting漏洞,为了修复这个,顺便研究了一下跨站脚本攻击的原理, 跨站脚本攻击基本上就是sql注入的html版, 核心内容就是把一段精心设计的脚本通过网页中的html漏洞由HTTP GET/POST传给服务器并执行. XSS主要有两种,一种是注入的链接需要骗人来点击,目的是劫持用户的cookie; 一种是该脚本已经通过此方法注入了DB,每次有人浏览正常的该网站链接都会执行该脚本,理论上java script能做的都可以做。
 
我这里有个简单示例,我的网页中由于需求需要判断客户端浏览器来启动对应版本的程序,所以JSP代码中有这一段:
<%   
String sz = request.getHeader("user-agent");   
...   
%>   
...   
<script type="text/javascript">   
var sz = "<%=sz%>";   
...(sz.indexOf('Firefox/') != -1 ...) //此处省略,主要是判断HTTP HEAD的信息,取客户浏览器。   
</script>   

 

 这么一段简单的代码,就有漏洞。 我这里通过chrome正常获取的http head的头是这样的:
 
 
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36   
 
 
所以var sz ="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36" 
 
 
 
 但客户端可以通过修改HTTP HEAD中由浏览器响应的正常属性达到注入目的。通过分析页面源码,可以构造一个字符串 ";alert(document.cookie);"
 
 
 最终页面代码就变成了:
 
<script type="text/javascript">   
sz = "";alert(document.cookie);""   
...   
</script>   

 

注入目的达成,如果有人点击了这个链接,可以进一步用脚本将用户的cookie发送给外网的其他服务器,劫持cookie。
 
 
 
解决的方法也比较简单,就是对用户传来的任何信息进行输入检查,如编码。 可以采用JDK的URLEncoder或apache commons的StringEscapeUtils 使script代码不能逃离我们限定的范围。我这里就是这样处理,将
 
 
request.getHeader("user-agent")   
 
 
改成
 
 
URLEncoder.encode(request.getHeader("user-agent"))   
 
 
最终就算html注入进来,结果也变成了:
 
sz = "%22%3Balert%28document.cookie%29%3B%22";该脚本无法成为可执行脚本。

 

 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论