跨站脚本攻击(Cross-site scripting,通常简称为XSS)发生在客户端,可被用于进行窃取隐私、钓鱼欺骗、偷取密码、传播恶意代码等攻击行为。

恶意的攻击者将对客户端有危害的代码放到服务器上作为一个网页内容, 使得其他网站用户在观看此网页时,这些代码注入到了用户的浏览器中执行,使用户受到攻击。

一般而言,利用跨站脚本攻击,攻击者可窃会话COOKIE从而窃取网站用户的隐私,包括密码。

XSS攻击使用到的技术主要为HTML和Javascript,也包括VBScript和ActionScript等。XSS攻击对WEB服务器虽无直接危害,但是它借助网站进行传播,使网站的使用用户受到攻击,导致网站用户帐号被窃取,从而对网站也产生了较严重的危害。

跨站脚本漏洞原理

攻击者通过网站的输入点嵌入非法的HTML标签与JavaScript脚本并执行以达到在客户端攻击的目的。 攻击者注入的标签与脚本最终都要在客户端执行,攻击的过程实际上都 在客户端的浏览器上发生的。 能在客户端进行跨站的不仅仅是HTML标签与JavaScript脚本,还包含一些其它的客户端应用,比如Flash里的ActionScript脚本也能辅助发起XSS攻击

跨站脚本漏洞发生在哪里

Cross-Site Scripting (XSS) 漏洞在以下情况下发生:

  1. 数据通过一个不可信赖的数据源进入 Web 应用程序。 对于 Reflected XSS,不可信赖的源通常为 Web 请求,而对于 Persisted(也称为 Stored)XSS,该源通常为数据库或其他后端数据存储
  2. 在未检验包含数据的动态内容是否存在恶意代码的情况下,便将其传送给了 Web 用户

跨站脚本漏洞实例

例 1

  1. 类型1:CSS跨站
  2. [HTML_REMOVED]//style属性值用户可控或者用户可以直接编辑模板
  3. 恶意用户可以提交“xss:expr/*XSS*/ession(alert('XSS'))”作为STYLE标签的属性值,或者在编辑模板的地方,
  4. 恶意用户可以将JS代码写入CSS文件,导致跨站漏洞
  5. 类型2:HTML标签跨站
  6. [HTML_REMOVED]">
  7. 由于程序没有对标签进行转义,恶意用户可以提交
  8. http://www.test.com/search.php? evil_content =">[HTML_REMOVED]alert(/XSS/)[HTML_REMOVED]<
  9. 执行任意JS代码,导致跨站漏洞
  10. 类型3:Javascript跨站
  11. [HTML_REMOVED]
  12. var UID ='0';
  13. var isLogin =false;
  14. var KEY ='';//KEY变量用户可控
  15. var FROMTAG =1;
  16. [HTML_REMOVED]
  17. 用户可以提交:
  18. http://www.test.com/news/tag.jsp?key=%27;alert%281%29;//
  19. 变量key包含在JavaScript代码段中。原始代码被修改为:
  20. [HTML_REMOVED]
  21. var UID ='0';
  22. var isLogin =false;
  23. var KEY ='';alert(1);//恶意用户修改了页面输出代码';

例 2

下面的 ASP.NET 代码片段会在一个 HTTP 请求中读取一个雇员 ID,并显示给用户。

  1. protectedSystem.Web.UI.WebControls.TextBoxLogin;
  2. protectedSystem.Web.UI.WebControls.LabelEmployeeID;
  3. ...
  4. EmployeeID.Text=Login.Text;

如果 Login 只包含标准的字母或数字文本,这个例子中的代码就能正确运行。 如果 Login 有一个包含元字符或源代码的值,那么 Web 浏览器就会像显示 HTTP 响应那样执行代码。

起初,这个例子似乎是不会轻易遭受攻击的。 毕竟,有谁会输入导致恶意代码的 URL,并且还在自己的电脑上运行呢? 真正的危险在于,攻击者会创建恶意的 URL,然后使用电子邮件或者其他诡计诱使受害者点击这个链接。 当受害者点击这个链接时,就会不知不觉地通过易受攻击的 Web 应用程序,使自己的电脑蒙受恶意内容带来的风险。 这种对易受攻击的 Web 应用程序进行盗取的机制通常被称为反射式 XSS。

例 3

下面的 ASP.NET 代码片段会根据一个给定的雇员 ID 来查询数据库,并显示出该雇员的相应姓名。

  1. protectedSystem.Web.UI.WebControls.LabelEmployeeName;
  2. ...
  3. string query ="select * from emp where id="+ eid;
  4. sda =newSqlDataAdapter(query, conn);
  5. sda.Fill(dt);
  6. string name = dt.Rows[0]["Name"];
  7. ...
  8. EmployeeName.Text= name;

如同例 2,如果对 name 的值处理得当,该代码就能正常地执行各种功能;如若处理不当,就会对代码的盗取行为无能为力。 同样,这段代码暴露出的危险较小,因为 name 的值是从数据库中读取的,而且显然这些内容是由应用程序管理的。 然而,如果 name 的值是由用户提供的数据产生,数据库就会成为恶意内容沟通的通道。

如果不对储存于数据库中的所有数据进行恰当的输入确认,那么攻击者便能在用户的 Web 浏览器中执行恶意命令。

这种类型的 Persistent(称作 Stored XSS)盗取极其阴险狡猾,由于数据存储的间接性,使得辨别威胁的难度增大,而且还提高了一个攻击影响多个用户的可能性。 XSS 盗取会从访问提供留言簿 (guestbook) 的网站开始。

攻击者会在这些留言簿的条目中嵌入 JavaScript,接下来所有访问该留言簿的用户都会执行这些恶意代码

跨站脚本漏洞危害

  1. 钓鱼欺骗:最典型的就是利用目标网站的反射型跨站脚本漏洞将目标网站重定向到钓鱼网站,或者注入钓鱼JavaScript以监控目标网站的表单输入,甚至发起基于DHTML更高级的钓鱼攻击方式。
  2. 网站挂马:跨站时利用IFrame嵌入隐藏的恶意网站或者将被攻击者定向到恶意网站上,或者弹出恶意网站窗口等方式都可以进行挂马攻击。
  3. 身份盗用:Cookie是用户对于特定网站的身份验证标志,XSS可以盗取到用户的Cookie,从而利用该Cookie盗取用户对该网站的操作权限。如果一个网站管理员用户Cookie被窃取,将会对网站引发巨大的危害。
  4. 盗取网站用户信息:当能够窃取到用户Cookie从而获取到用户身份使,攻击者可以获取到用户对网站的操作权限,从而查看用户隐私信息。
  5. 垃圾信息发送:比如在SNS社区中,利用XSS漏洞借用被攻击者的身份发送大量的垃圾信息给特定的目标群。
  6. 劫持用户Web行为:一些高级的XSS攻击甚至可以劫持用户的Web行为,监视用户的浏览历史,发送与接收的数据等等。
  7. XSS蠕虫:XSS 蠕虫可以用来打广告、刷流量、挂马、恶作剧、破坏网上数据、实施DDoS攻击等。

跨站脚本漏洞解决方案

  1. 检查变量是否正确初始化并明确变量类型
  2. 不仅要验证数据的类型,还要验证其格式、长度、范围和内容。
  3. 不要仅仅在客户端对数据做HTML标签转义以及过滤单引号,双引号等危险字符,关键的过滤步骤也应该在服务端进行。
  4. 对输出到页面的数据也要做安全检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。
  5. 在发布应用程序之前测试所有已知的威胁。

xss跨站实例总结的更多相关文章

  1. XSS跨站及利用

    (一)软件测试环境以及搭建 测试环境:本地 XAMPP 1.7.1 测试软件:PHP168整站v5.0 软件下载地址 http://down2.php168.com/v2008.rar PHP.ini ...

  2. XSS跨站攻击

    目录 1 XSS跨站攻击简介 1 1.1 什么是XSS 1 1.2 XSS的分类 1 1.3 XSS的危害 1 2 XSS的攻击原理 1 2.1 本地式漏洞攻击 1 2.2 存储式漏洞攻击 2 2.3 ...

  3. 云锁Linux服务器安全软件安装及防护webshell、CC、XSS跨站攻击设置

    无论我们在使用电脑,还是使用VPS/服务器的时候,最为担心的就是服务器是否有安全问题,尤其是网站服务器再遭受攻击的时候如何得到防护.对于大 部分站长用户来说,我们可能只会使用基础的环境,如果真遇到问题 ...

  4. XSS跨站脚步攻击及防范

    XSS(Cross Site Script)跨站脚本攻击.它指的是恶意攻击者往Web 页面里插入恶 意html 代码,当用户浏览该页之时,嵌入其中Web 里面的html 代码会被执行,从而达到侵害用户 ...

  5. XSS跨站测试代码大全

    '><script>alert(document.cookie)</script>='><script>alert(document.cookie)&l ...

  6. ASP.NET防御XSS跨站攻击

    目前做ASP.NET项目的时候就有遇到过“用户代码未处理HttpRequestValidationException:从客户端***中检测到有潜在危险的 Request.Form/Request.Qu ...

  7. xss跨站攻击测试代码

    '><script>alert(document.cookie)</script> ='><script>alert(document.cookie)& ...

  8. Phpwind v9.0 存储型xss跨站漏洞

    漏洞版本: Phpwind v9.0 漏洞描述: Phpwind专注于中小网站应用的整合和价值的发掘,我们认为,以社区为网站的基础,可以提供丰富的应用,满足人们获取信息.交流.娱乐.消费等生活需求.获 ...

  9. web前端安全 XSS跨站脚本 CSRF跨站请求伪造 SQL注入

    web安全,从前端做起,总结下web前端安全的几种技术: 1,XSS XSS的全称是Cross Site Scripting,意思是跨站脚本,XSS的原理也就是往HTML中注入脚本,HTML指定了脚本 ...

随机推荐

  1. jQuery-DataTables相关的网址

    DataTables 有没有觉得这张图的数据很熟悉,对,他们都是copy来的. 之前用了一个bootstrap的框架,写那个框架的老师,有点抠门,把很多js都合在了一起,不知道怎么去自定义自己的东西, ...

  2. 利用set排序数组并且去掉重复的数组元素

    public class testList { public static void main(String[] args){ java.util.List<String> ls = ne ...

  3. iOS平台使用陀螺仪传感器

    在移动端开发过程中,有时候会用到陀螺仪传感器获取当前手机的姿态,下面给出iOS端如何获取陀螺仪姿态数据的代码: //根据陀螺仪的四元数转换为矩阵 + (GLKMatrix4)calculateMatr ...

  4. NBU expired Media,Media ID not found in EMM database

    Subject:When attempting to expire a media in Veritas NetBackup (tm) 6.0 with the bpexpdate command, ...

  5. 如何替换orcl实例下的四个数据库

    1,drop 数据库对应的用户 2,创建新的表空间 新的用户 3,导入新的数据库 imp grid_sysdb/sagis@klmy file=F:\data\addr_interestpoint.d ...

  6. [转] 计算几何模板Orz

    #include<math.h> #define MAXN 1000 #define offset 10000 #define eps 1e-8 #define PI acos(-1.0) ...

  7. Oracle数据库中序列用法讲解

    序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字).其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一 ...

  8. android 客户端支付宝 php服务器端编写

    生成私钥 输入“genrsa -out rsa_private_key.pem 1024”命令,回车后,在当前 bin 文件目 录中会新增一个 rsa_private_key.pem 文件,其文件为原 ...

  9. 有趣的EditView为空时的抖动效果(用户名和密码)--第三方开源--ClearEditText

    ClearEditText在github上的链接地址是:https://github.com/zhangphil/ClearEditText 用法十分简单,在布局中使用ClearEditText,在J ...

  10. iOS定位服务编程详解

    现在的移动设备很多都提供定位服务,使用iOS系统的iPhone.iPod Touch和iPad都可以提供位置服务,iOS设备能提供3种不同途径进行定位:Wifi, 蜂窝式移动电话基站, GPS卫星 i ...