什么是XSS
XSS:Cross site script(跨站脚本) (缩写应该是css,为了和CSS(层叠样式表)做区分所以叫XSS)
概念:黑客通过“HTML注入”篡改网页,插入恶意脚本,当用户在浏览网页时,实现控制用户浏览器行为的一种共计方式。
常见危害:盗取用户信息、钓鱼、制造蠕虫等,当然也可以盗取用户cookie。
XSS分类
存储型XSS
建议使用Firefox浏览器的firebug插件(目前firefox已经整合来firebug的功能)
触发过程:用户打开浏览器,访问嵌入列XSS脚本的页面,浏览器向web后端应用程序请求页面内容,页面中的留言是存储在数据库中所以需要查询数据库,数据库会返回携带XSS脚本的留言返回给web应用程序,并最终显示在用户浏览器中,触发XSS。
这里有个非常明显的特征,存在XSS脚本的留言是存储在数据库中,是什么时候存在数据库中的呢?黑客恶意构造的,并写入到数据库中。
黑客精心构造XSS恶意脚本,进行留言,提交给web应用程序,并写入到数据库中,其他正常用户或者系统管理员在查看留言时就会触发XSS,
存储型XSS 的关键点在于:XSS的脚本内容是存储在数据库中的。
反射型XSS
触发过程:访问携带XSS脚本的链接,触发XSS。
例如:黑客通过聊天方式或者是邮件给发送一个链接,一打开这个链接就触发列XSS。
与存储型XSS不同的是反射型XSS在链接中/URL中可以看到非常明显的XSS特征,例如name = <ing src @ onerror = alert(/XSS)>。
查看源码了解详情,我们也需要借助firebug这个插件。按F12切换到HTML选项卡 ,在搜索栏中输入要搜索的关键字“XSS”。(这个也是图片加载失败,执行了onerror事件触发了XSS。)
攻击过程:
用户在浏览器中访问带有XSS的链接,浏览器向后端应用程序发送请求,后端服务器解析请求输入到响应页面并返回给浏览器,浏览器渲染响应页面触发XSS。
存储型XSS和反射型XSS的区别
存储型:黑客访问页面植入XSS脚本,用户方位页面触发XSS,从数据库中提取XSS内容。
反射型:用户访问带有XSS脚本的链接,直接触发XSS,从URL中提取XSS内容。
DOM型
触发过程:用户访问携带XSS脚本的链接,触发XSS(这个过程跟反射型XSS是一样的)
有什么区别呢?用firebug看看吧。
DOM型XSS不是在URL的参数中,而是在URL的哈希中(hash(哈希)“#”号分割符后的内容),URL中的哈希串是不会发送到后端服务器的,那说明向用户输出XSS脚本的不是后端服务器而是前端页面。
打开浏览器firebug,搜索框中输入hash看看:
攻击过程:
用户访问携带XSS脚本的链接,浏览器通过JavaScript从URL中提取出XSS的脚本内容并写入到DOM中触发XSS。
Dom型XSS和反射型XSS最大的区别:
DOM型XSS:通过前端JavaScript讲XSS脚本写入DOM中触发XSS;
反射型XSS:通过后端应用程序将XSS脚本写入到响应页面中,浏览器渲染响应页面时触发XSS。对于反射型XSS更为简单的查看方式是:在页面空白处右击,查看源代码。
DOM型XSS是无法通过查看页面源代码找到触发位置的,因为XSS并不是服务器返回的数据,而是浏览器通过JavaScript直接触发的。所以需要通过firebug插件来查看。
XSS类型 | 存储型 | 反射型 | Dom型 |
触发过程 |
| 正常用户访问携带XSS脚本的URL | 正常用户访问携带XSS脚本的URL |
数据存储 | 数据库 | URL | URL |
谁来输入 | 后端web应用程序 | 后端web应用程序 | 前段JavaScript |
输出位置 | HTTP响应中 | HTTP响应中 | 动态构造的dom节点 |
野兔
2019.2.17