最近项目被第三方工具扫描出来有一个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";
该脚本无法成为可执行脚本。
本文出自 “祝坤荣” 博客,请务必保留此出处
相关推荐
XSS攻击常识及常见的XSS攻击脚本汇总
简单让你了解xss攻击。 项目基于Asp.net 框架,VS2010下创建,C#语言
一、什么是XSS攻击 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如...
自定义一个Filter拦截器,使用 Filter来过滤浏览器发出的请求,检测每个请求的参数是否含有XSS攻击关键字,如果存在xss攻击关键字,转义特殊字符。 方法是实现一个自定义的 HttpServletRequestWrapper ,然后在 ...
SpringBoot +esapi springSecurity 过滤器链集成 实现防止xss攻击 实战代码
1.处理springboot项目的xss攻击的技术调研文档 2.处理富文本的存储类型的XSS攻击 3.处理URL参数层面的反射类型的XSS攻击
网站xss 攻击 代码示例,包括alert弹框,钓鱼网站截取用户cookie信息等;是学习xss的简单示例。可以下载玩玩看看,示例中的钓鱼网站地址为 演示地址,即本资源中的项目地址。xss也是很简单的,可以学习学习
首先说一下思路,防止这种类似于注入攻击,就是使用拦截器(Filter)处理特殊字符或过滤特殊字符 今天介绍一个方法,利用覆盖Servlet的getParameter方法达到处理特殊字符的目的来解决(防止)Xss攻击 web.xml,需要的...
web安全之XSS攻击及防御,
前端提供一个简单的用户注册表单页面,后端使用node.js搭建,并运用express搭建简单的web应用,通过body-parser解析用户post上来的信息,模拟简单的xss攻击
SpringBoot +esapi 实现防止xss攻击 实战代码,真实有效
xss攻击处理的几种方式
原理过程 Springboot中会使用FilterRegistrationBean来注册Filter,Filter是Servlet规范里面的,属于容器范围,Springboot中没有web.xml,那Springboot中,不用管Filter是如何交给Ser......处理Xss攻击及sql注入.zip
防止XSS攻击简单实用的解决办法,直接复制两个过滤器,然后配置web.xml即可实现
预防xss攻击,过滤标签.js
Java防止xss攻击依赖jar包
xss攻击(post)流量数据包
web安全之XSS攻击demo,配合我个人博客使用,谢谢各位的捧场
一种自动生成XSS攻击向量的方法,冯亦彤,罗守山,针对XSS漏洞检测工具在攻击向量选取上的不足,本文提出了一种自动生成XSS攻击向量的方法。为了优化攻击向量的生成,本文从三个方面