浏览器安全之XSS
目录
一、同源策略
同源策略是什么:
同源策略是一个重要的安全策略,它用于限制来自不同源的"document"或脚本,对当前"document"的读取或设置某些属性。是否同源的影响因素
- 协议
- host(IP或域名)
- 子域名
- 端口
不受同源策略影响的标签
这些带“src”属性的标签加载资源时,是由浏览器来发起GET请求获取资源。与XMLHttpRequest不同的是,加载的资源,浏览器限制了JavaScript的权限,使其不能读、写返回的内容- <script>
- <img>
- <iframe>
- <link>
- …
二、XSS
XSS是什么? XSS(Cross Site Script)攻击全称是跨站脚本攻击,通常指通过“HTML注入”插入恶意代码篡改网页,从而在用户浏览网页时,控制用户浏览器的一种攻击。
XSS分类
- 反射性XSS
- 非持久化,恶意代码不存储在服务器中的,需要诱骗用户自己去点击链接才能触发XSS代码。
- 典例:发你个链接诱骗你点击
- 存储性XSS
- 持久化,恶意代码是存储在服务器中的,用户访问该页面的时候就会触发代码执行。
- 典例:留言板恶意代码
- DOM Based XSS
- 不通过恶意代码是否存储在服务器来区分,指的是通过修改页面的DOM节点形成的XSS
- 利用方式:.innerHTML修改DOM来插入链接或者闭合标签构建新链接
- 反射性XSS
XSS危害
- Cookie劫持
- 直接模拟用户身份发起GET、POST请求完成恶意操作,如删除用户的文章
- XSS钓鱼,用js伪造登录框
- XSS蠕虫(XSS Worm)
XSS防御
- 给Cookie设置HttpOnly,这样JS就不能获取设置了HttpOnly的Cookie。
- 输入检查:XSS Filter(检查使用字符域、输入格式规范、是否包含敏感字符)
- 输出检查:使用编码或者转义来防止恶意代码被当做脚本执行。
- 在HTML标签中输出:使用HtmlEncode
- 在HTML属性中输出:使用严格HtmlEncode,除字母数字外,所有字符都编码成HTMLEntities
- 在<script>标签中输出:使用JavaScriptEncode
- 在事件中输出:OnClick等,使用JavaScriptEncode
- 在CSS中输出:EncoderForCSS()类似的CSS编码方法
- 在地址中输出:URLEncode()、检验是否http开头防止通过伪协议调用js
- 处理富文本:只允许a、img、div等比较安全地带标签,Anti-Samy开源富文本XSS检测项目
- DOM Based XSS
- js输出到页面必经之路(重点关注这些地方的参数输出,采用编码预防XSS)
- document.write()
- document.writeln()
- xxx.innerHTML=
- xxx.outerHTML=
- innerHTML.replace()
- document.attachEvent()
- window.attachEvent()
- document.location.replace()
- document.location.assign()
- …
- 常见输入点
- 页面中所有的imputs框
- window.location(href、hash)
- window.name
- document.referrer
- document.cookie
- localstorage
- XMLHttpRequest返回的数据
- …
- http://code.google.com/p/domxsswiki
- js输出到页面必经之路(重点关注这些地方的参数输出,采用编码预防XSS)
- 对于涉及用户交互的地方,容易被XSS Worm攻击
三、XSS攻击之HttpOnly绕过
- XSS防御绕过(大小写替换为空等绕过):http://www.360doc.com/content/20/0603/09/68828020_916193044.shtml
- XSS攻击之HttpOnly绕过:https://blog.csdn.net/weixin_42478365/article/details/116597222
- HttpOnly钓鱼绕过:http://www.360doc.com/content/20/0614/14/68828020_918413632.shtml
四、区别
- 存储型XSS:你发送一次带XSS代码的请求,以后这个页面的返回包里都会有XSS代码
- 反射型XSS:你发送一次带XSS代码的请求,只能在当前返回的数据包中发现XSS代码
- DOM型XSS:你发送一次带XSS代码的请求,在返回包里压根儿就找不到XSS代码的影子; 作者:上面有竹 链接:https://www.zhihu.com/question/26628342/answer/140795922
前端网络安全(一):XSS:https://zhuanlan.zhihu.com/p/604601101