跨站脚本攻击(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. Laravel5中防止XSS跨站攻击的方法

    本文实例讲述了Laravel5中防止XSS跨站攻击的方法.分享给大家供大家参考,具体如下: Laravel 5本身没有这个能力来防止xss跨站攻击了,但是这它可以使用Purifier 扩展包集成 HT ...

  3. 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 ...

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

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

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

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

  6. 修复XSS跨站漏洞

    XSS跨站漏洞最终形成的原因是对输入与输出没有严格过滤. 1.输入与输出 在HTML中,<,>,",',&都有比较特殊的意义.HTML标签,属性就是由这几个符合组成的.P ...

  7. 可以用到的XSS跨站语句

    我们常用的测试XSS跨站的语句一般是alert比如: <script>alert(“sex”)</script> <script>alert(/sex/)</ ...

  8. DVWA的Xss跨站总结

    Xss跨站总结 初级防护的代码 Poc:<script>alert(1)</script> 上图防护的代码 为输入的结果就为输出的结果 中级防护的代码 Poc:<scri ...

  9. WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等

    核心概念 WAF Web应用防火墙(Web Application Firewall),简称WAF. Web攻击 针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入.XSS跨站.Websh ...

随机推荐

  1. C语言 百炼成钢15

    //题目43:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出 //圈子,问最后留下的是原来第几号的那位. #include<stdio.h> #inclu ...

  2. OAF 使用 javascript 使某个按钮在5秒内不能重复点击

    首先要保证按钮是BUTTON,并且按钮事件设置firePartialAction. public class CuxXXXXPGCO extends OAControllerImpl { public ...

  3. ubuntu上怎么设置默认python命令是执行python3而不是python2

    来源:https://segmentfault.com/q/1010000003713912 alternatives这么好的机制用起来呀. shell里执行: sudo update-alterna ...

  4. Android开发探秘之二:导入存在的项目及其注意事项

    网上看到有jsoup写的例子,就下载下来进行了研究,但是发现不会导入,于是就百度一下,发现了方法:也就是依次点击“File”->“Import”->“General”->“Exist ...

  5. MyBatis与Hibernate对比

    一.相同点 都屏蔽 jdbc api 的底层访问细节,使用我们不用与 jdbc api 打交道,就可以访问数据. jdbc api 编程流程固定,还将 sql 语句与 java 代码混杂在了一起,经常 ...

  6. aptana studio 3汉化方法 及支持jquery的方法

    之前看弦哥的 Asp.Net大型项目实践系列第二季(一)哥欲善其事,必先利其器 看到他介绍了aptana,好像用来学习js是个好工具... 因为不论你写什么,都会提示你它在各个浏览器中是否被支持... ...

  7. Opencv step by step - 图像变换

    这里举出三个案例: #include <cv.h> #include <highgui.h> void image_smooth(IplImage * image) { cvN ...

  8. Html中metra的含义

    from: http://dev.csdn.net/article/60/60902.shtm meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta 标签用于网页的<head&g ...

  9. css大牛的博客

    一个不能再牛的个人简历,请用pc观看:http://strml.net/ 用css来画圆http://jingyan.baidu.com/article/c910274be4dd69cd371d2d4 ...

  10. [BZOJ 3038]上帝造题的7分钟2(树状数组)

    分析:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3038 这题看起来没办法做……但是注意到1e12只要开方8次就能到1……所以直接暴力就行 ...