XSS跨站脚本攻击——及修复防御
其他
2020-03-21 10:28:28
阅读次数: 0
XSS漏洞相关基础知识-浏览器工作机制
- 浏览器常见的有IE、Firefox、Chrome等,这些浏览器在性能和效率上也许有较大差别,但是它们基本的工作机制是相同的。
|
- 浏览器主要是解析渲染Web中间件响应的HTML、JavaScript、CSS等资源。
|
XSS漏洞相关基础知识-HTML
- HTML 是用来描述网页的一种语言。Web 浏览器的作用是读取 。
|
- HTML 文档,并以网页的形式显示出它们。浏览器不会显示 。
|
|
XSS漏洞相关基础知识-JavaScript
|
- JavaScript 代码可插入 HTML 页面,并由所有的现代浏览器执行。
|
- JavaScript 能够改变任意 HTML 元素的大多数属性。
|
- JavaScript 往往用来改善HTML的展现,从而带给用户更好的体验。
|
XSS漏洞原理
- XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是攻击者往Web页面或者URL里插入恶意JavaScript脚本代码,如果Web应用程序对于用户输入的内容没有过滤,那么当正常用户浏览该网页的时候,嵌入在Web页面里的恶意JavaScript脚本代码会被执行,从而达到恶意攻击正常用户的目的。
|
|
|
|
- 跨站脚本攻击—XSS(Cross Site Script),是指攻击者通过在Web页面中写入恶意脚本,造成用户在浏览页面时,获取控制用户浏览器进行操作的攻击方式。
|
XSS漏洞出现的两个条件
|
- 2、输入能返回到前端页面上被浏览器当成脚本语言解释执行
|
XSS漏洞危害
|
- 持久型Cooke以文本形式存储在硬盘上,由浏览器存取
- 临时型Cookie也称会话Cookie,存储在内存中,当前浏览器关闭后会消失
- cookie是Web应用程序用来识别用户的凭证,很多情况下是唯一的凭证。当用户第一次登录网站时,网站会给用户发放一个唯一的cookie,用户再次登录网站时,凭借该cookie用户就不需要再次登录。
- 通过JavaScript,浏览器可以操作用户的cookie。
- 在浏览器地址栏输入javascript:alert (document. cookie)就可以查看某个网站颁发的Cookie
- Session和Cookie最大的区别在于:
- Session是保存在服务端的内存里面,而Cookie保存与浏览器或客户端的文件里面。
|
|
- 如某 CMS 的留言系统存在一个存储型 XSS 漏洞,攻击者把 XSS 代码写进留言信息中,当管理员登录后台并查看是,便会触发 XSS 漏洞,由于 XSS 是在后台触发的,所以攻击的对象是管理员,通过注入 JavaScript 代码,攻击者便可以劫持管理员会话执行某些操作,从而达到提升权限的目的。
- 比如,攻击者想利用 XSS 添加一个管理员账号,只需要通过之前的代码审计或其他方式,截取到添加管理员账号时的 HTTP 请求信息,然后使用 XMLHTTP 对象在后台发送一个 HTTP 请求即可,由于请求带上了被攻击者的 Cookies,并一同发送到服务端,即可实现添加一个管理员账户的操作。
|
|
|
|
|
|
- 通过精心构造的 XSS 代码,可以实现非法转账、篡改信息、删除文章、自我复制等诸多功能。
|
|
- 一般都是通过篡改网页的方式来实现的,如在 XSS 中使用 <iframe> 标签。
|
|
- 重定向钓鱼
- 把当前页面重定向到一个钓鱼页面。
- HTML 注入式钓鱼
- 使用 XSS 漏洞注入 HTML 或 JavaScript 代码到页面中。
|
|
- 注入恶意 JavaScript 代码,可能会引起一些拒绝服务攻击。
|
XSS漏洞分类
|
- 反射型XSS,又称非持久型XSS。也就是攻击相对于受害者而言是一次性的,具体表现在受害者点击了含有的恶意JavaScript脚本的url,而Web应用程序只是不加处理的把该恶意脚本“反射”回受害者的浏览器而使受害者的浏览器执行相应的脚本。
|
|
-
- 储存型XSS,也就是持久型XSS。攻击者上传的包含恶意js脚本的留言等信息被Web应用程序保存到数据库中,Web应用程序在生成新的页面的时候如果包含了该恶意js脚本,这样会导致所有访问该网页的浏览器解析执行该恶意js脚本。这种攻击类型一般常见在博客、论坛等网站中
- js攻击脚本被保存到数据库中
|
|
- DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。
- DOM-XSS简单去理解就是因为他输出点在DOM。
- Dom型xss和反射型xss很相似,为什么呢?
- 攻击者构造 url 发送给受害者。
|
xss变形
- 大小写混合字符<scRiPt>alert(1)</scrIPt>
|
- 过滤尝试<scr<script>ipt>alert(1)</scr<script>ipt>
|
- src属性 <img src=x οnerrοr=alert(1)> <img/src=x οnerrοr=alert(1)> <video src=X οnerrοr=alert(1)> <audio src=x οnerrοr=alert(1)>
|
- iframe <iframe src="javascript:alert(2)">
|
|
- “background”属性 <table background=javascript:alert(1)></table> // Works on Opera10.5 and IE6 “posters"
- “posters” 属性 <video poster=javascript:alert(1)//></video> // Works Upto Opera10.5
- “data”属性 <object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4="> <object/data=//goo.gl/nlX0P?
- “code”属性 <applet code="javascript:confirm(document.cookie);"> // FirefoxOnly <embed code="http://businessinfo.co.uk/labs/xss/xss.swf" allowscriptaccess=always>
|
|
- <svg οnlοad=prompt(1)> <marquee onstart=confirm(2)> <body οnlοad=prompt(1)> <select autofocus οnfοcus=alert(1)> <textarea autofocus οnfοcus=alert(1)> <keygen autofocus οnfοcus=alert(1)> <video><source οnerrοr="javascript:alert(1)">
|
|
- <a οnmοuseοver="javascript:window.οnerrοr=alert;throw 1>
- <img src=x οnerrοr="javascript:window.οnerrοr=alert;throw 1">
|
|
- URL编码
- unicode编码
- HTML编码
- CSS编码
|
XSS修复与防御
- htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。预定义的字符:
|
- & (和号)成为 &
- " (双引号)成为 "
- ' (单引号)成为 '
- < (小于)成为 <
- > (大于)成为 >
|
|
- 当cookie设置为httponly之后,浏览器的cookie无法通过客户端js脚本获取
|
发布了42 篇原创文章 ·
获赞 145 ·
访问量 5093
转载自blog.csdn.net/cldimd/article/details/105000134