一个简单XSS攻击示例及处理

简介: 最近项目被第三方工具扫描出来有一个Http head xss cross scripting漏洞,为了修复这个,顺便研究了一下跨站脚本攻击的原理, 跨站脚本攻击基本上就是sql注入的html版, 核心内容就是把一段精心设计的脚本通过网页中的html漏洞由HTTP GET/POST传给服务器并执行. XSS主要有两种,一种是注入的链接需要骗人来点击,目的是劫持用户的cookie; 一种是该脚本已经通过此方法注入了DB,每次有人浏览正常的该网站链接都会执行该脚本,理论上java script能做的都可以做。

最近项目被第三方工具扫描出来有一个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";

该脚本无法成为可执行脚本。

 

 

本文出自 “祝坤荣” 博客,请务必保留此出处

目录
相关文章
|
4月前
|
存储 安全 JavaScript
手摸手带你进行XSS攻击与防御
当谈到网络安全和信息安全时,跨站脚本攻击(XSS)是一个不可忽视的威胁。现在大家使用邮箱进行用户认证比较多,如果黑客利用XSS攻陷了用户的邮箱,拿到了cookie那么就可以冒充你进行收发邮件,那真就太可怕了,通过邮箱验证进行其他各种网站的登录与高危操作。 那么今天,本文将带大家深入了解XSS攻击与对应的防御措施。
|
5天前
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
30 4
|
4天前
|
安全 Go PHP
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
23 2
|
6天前
|
存储 安全 Go
Web安全基础:防范XSS与CSRF攻击的方法
【10月更文挑战第25天】Web安全是互联网应用开发中的重要环节。本文通过具体案例分析了跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的原理及防范方法,包括服务器端数据过滤、使用Content Security Policy (CSP)、添加CSRF令牌等措施,帮助开发者构建更安全的Web应用。
34 3
|
2月前
|
存储 安全 JavaScript
XSS跨站脚本攻击详解(包括攻击方式和防御方式)
这篇文章详细解释了XSS跨站脚本攻击的概念、原理、特点、类型,并提供了攻击方式和防御方法。
172 1
|
1月前
|
存储 JavaScript 安全
|
1月前
|
存储 JavaScript 前端开发
Xss跨站脚本攻击(Cross Site Script)
Xss跨站脚本攻击(Cross Site Script)
|
4月前
|
SQL 安全 数据库
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
【7月更文挑战第26天】在 Python Web 开发中, 安全性至关重要。本文聚焦 SQL 注入、XSS 和 CSRF 这三大安全威胁,提供实战防御策略。SQL 注入可通过参数化查询和 ORM 框架来防范;XSS 则需 HTML 转义用户输入与实施 CSP;CSRF 防御依赖 CSRF 令牌和双重提交 Cookie。掌握这些技巧,能有效加固 Web 应用的安全防线。安全是持续的过程,需贯穿开发始终。
86 1
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
|
3月前
|
监控 安全 JavaScript
对跨站脚本攻击(XSS)的防御策略?
【8月更文挑战第15天】
235 1
|
3月前
|
存储 安全 JavaScript
XSS攻击(Cross-Site Scripting)
【8月更文挑战第11天】
67 2