XSS
原理
前端代码注入,拼接恶意的html,真正执行恶意代码的是js语句
常见业务场景:
重灾区:评论区、留言区、个人信息、订单信息等
针对型:站内信、网页即时通讯、私信、意见反馈
存在风险:搜索框、当前目录、图片属性等
危害:盗取cookie,获取内网ip,获取浏览器保存的明文密码,截取网页屏幕……
检测:一般是让浏览器弹窗
经典弹窗语句:<script>alert(1)</script>
<a href=javascript:alert(1)>test</a>
,JavaScript其实是一种伪协议,声明url的主体是任意的JavaScript代码
事件也可以执行js:onmouseover=alert(1)
、oninput=alert(1)
、onclick=alert(1)
等等
防范:转义字符输出,用白名单验证、HTML实体化……
三种类型
反射型xss
f12寻找输出点
如果弹窗函数被拦截,尝试prompt(1)
同源策略:它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。具体表现为浏览器在执行脚本前,会判断脚本是否与打开的网页是同源的,判断协议、域名、端口是否都相同,相同则表示同源。其中一项不相同就表示跨域访问。会在控制台报一个CORS异常,目的是为了保护本地数据不被JavaScript代码获取回来的数据污染
同源策略保护了a.com域名下的资源不被来自其他网页的脚本读取或篡改
同源:同 域名/host,端口,协议
存储型xss
嵌入到web页面的恶意html代码会被存储到应用服务器端,存入数据库,等用户再打开页面时,会继续执行恶意代码,能够持续攻击用户
xss平台获取cookie【安全起见,建议自己搭建一个,因为后台可以看到所有用户的Cookie】:https://xs.sb/xss.php?do=login(隐私模式访问)其他平台:XSSPT,XSS8.CC,load.com
存储型xss可能出现在:能插入数据库的地方,比如留言板,用户注册,上传文件的文件名
获取到别人的Cookie,可以使用Burp抓包直接修改抓包数据,也可以使用浏览器修改Cookie(建议火狐浏览器),登录别人的账户
DOM型xss
关于DOM:全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式
DOM型XSS其实是一种特殊类型的XSS,它是基于DOM文档对象模型的一种漏洞。在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。
也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。
可能触发DOM型xss的属性:
- document.referer属性
- window.name属性
- location属性
- innerHTML属性
- documen.write属性
DOM型防御
- 避免客户端文档重写、重定向或其他敏感操作,同时避免使用客户端数据,这些操作尽量在服务器端使用动态页面来实现;
- 分析和强化客户端JS代码,特别是受到用户影响的DOM对象,注意能直接修改DOM和创建HTML文件的相关函数或方法,并在输出变量到页面时先进行编码转义,如输出到HTML则进行HTML编码、输出到