浏览器安全
浏览器安全可以分为三大块——Web页面安全、浏览器网络安全和浏览器系统安全
同源策略
如果两个URL的协议、域名和端口都相同,我们就称这两个URL同源
同源策略主要表现在DOM、Web数据和网络这三个层面。
- DOM层面。同源策略限制了来自不同源的JavaScript脚本对当前DOM对象读和写的操作。
- 数据层面。同源策略限制了不同源的站点读取当前站点的Cookie、IndexDB、LocalStorage等数据
- 网络层面。同源策略限制了通过XMLHttpRequest等方式将站点的数据发送给不同源的站点
###权衡
页面中可以嵌入第三方资源
为了解决XSS攻击,浏览器中引入了内容安全策略,称为CSP。CSP的核心思想是让服务器决定浏览器能够加载哪些资源,让服务器决定浏览器是否能够执行内联JavaScript代码。
跨域资源共享和跨文档消息机制
引入了跨域资源共享(CORS),使用该机制可以进行跨域访问控制
引入了跨文档消息机制,可以通过window.postMessage的JavaScript接口来和不同源的DOM进行通信
跨站脚本攻击(XSS)
什么是 XSS
XSS全称是Cross Site Scripting
黑客往HTML文件中或者DOM中注入恶意脚本,从而在用户浏览页面时利用注入的恶意脚本对用户实施攻击的一种手段
- 可以窃取Cookie信息
- 可以监听用户行为
- 可以通过修改DOM伪造假的登录窗口,用来欺骗用户输入用户名和密码等信息
- 还可以在页面内生成浮窗广告
恶意脚本怎么注入的
存储型 XSS
2015年喜马拉雅就被曝出了存储型XSS漏洞,输入框中可以输入
<script src="xxx"></script>
,被存入了服务器,然后用户加载到了这个资源,通过XMLHttpRequest或者Fetch将用户的Cookie数据上传到黑客的服务器反射型XSS
例如浏览器输入
http://localhost:3000/?xss=123
,页面显示 123当打开
http://localhost:3000/?xss=<script>alert('你被xss攻击了')</script>
恶意脚本就被插入了。
基于DOM的XSS
基于DOM的XSS攻击是不牵涉到页面Web服务器的,主要通过网络劫持在页面传输过程中修改HTML页面的内容
如何阻止 xss 攻击
服务器对输入脚本进行过滤或转码
充分利用 csp
HttpOnly
使用HttpOnly标记的Cookie只能使用在HTTP请求过程中,所以无法通过JavaScript来读取这段Cookie
SCRF 攻击
什么是 SCRF 攻击
CSRF英文全称是Cross-site request forgery,又称为“跨站请求伪造”。
指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。简单来讲,CSRF攻击就是黑客利用了用户的登录状态,并通过第三方的站点来做一些坏事。
- 自动发起 get 请求,比如图片url
- 自动发起 post 请求,比如 form 表单
- 引诱点击,比如[点击下载美女图片] 实际上是个get url
如何防止
SCRF 的三个条件
- 目标站点有 SCRF 漏洞
- 用户要登录过目标站点,且保持了登录状态
- 需要用户打开一个第三方站点
避免方式
- 利用好 cookie 的 samesite 属性
- 验证请求的来源站点(通过 Referer 、Origin)
- SCRF token
安全沙箱
HTTPS 协议
在 http 协议层中引入安全层
对称加密和非对称加密搭配使用,添加数字证书