XSS攻击
1.什么是XSS攻击
1.1 定义
百度百科.XSS攻击通常指的是利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,也包括Java、Flash甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限如执行一些操作(劫持用户对话、插入恶意内容、重定向用户、使用恶意软件劫持用户浏览器、繁殖XSS蠕虫、修改路由配置信息等)、私密网页内容、会话和Cookie等各种内容。
1.2 原理
百度百科HTML是一种超文本标记语言,不同的标签会有不同的语义化情况,我们常见的符号(<)被看做是HTML标签的开始标签,当这些HTML标签被动态的插入到了动态页面中,用户浏览器会将其误认为是插入了HTML标签,这时若将其闭合之间插入一段JavaScript脚本时,这些脚本程序就会在用户浏览器中执行。所以当这些特殊字符不能被动态页面检查或检查出现错误的时候,就将会产生XSS漏洞
1.3示例
大佬举例
又一大佬举例
大概的意思就是说,当我们使用表单提交的情况,如果在表单提交的输入框中输入一些JavaScript指令,来注入到该程序中使程序不按照正常的情况进行运转。
2.什么情况可能会遭遇XSS攻击
优秀来源
1.HTML内嵌的文本中,恶意内容以script标签注入
2.在内联的JavaScript中,拼接的数据突破了原本的限制(字符串,变量,方法名等)。
3.在标签属性中,恶意内容包含引号,从而突破属性值的限制,注入其他属性或标签。
4.在标签的href、src等属性中,包含JavaScript:等可执行代码
5.在onload、onerror、onclick等事件中,注入不受控制的代码。
6.在style属性和标签中,包含类似 background-image:url(“javascript:…”); 的代码(新版本浏览器已经可以防范)。
7.在 style 属性和标签中,包含类似 expression(…) 的 CSS 表达式代码(新版本浏览器已经可以防范)。
3.如何避免XSS攻击
1.HTML转义
2.对于链接跳转,a标签中href属性或location.href,要校验其内容,禁止以JavaScript:开头的链接和其他非法的scheme
3.HTML转义十分复杂,在不同的情况下要采用不同的转义规则。如果采用了错误的转义规则,很有可能会埋下XSS隐患
4.尽可能采取业内成熟的通用的转义库,这样会避免自己写转义库有很多考虑不周的问题