前端安全
前端安全
性能优化
- cdn(静态资源存放)缓存 cdn预热(可遇见的活动,比如哪个路径资源需要提前预热):提前让cdn没有经过用户请求的时候,直接拉取原服务器资源,做一份缓存。
- cdn刷新机制
XSS (cross-site scripting,跨站脚本攻击
攻击者想尽一切办法把恶意代码注入到网页中
外在表现上,有哪些攻击场景?
- 可输入到地方植入js代码(评论区等)存储型
- url上拼接js代码
技术角度上,有哪些类型的攻击(分类)?
- 存储型 server (持久型) 论坛发帖,商品评价,用户私信等用户保存数据的网站
- 攻击步骤:
- 攻击者将恶意代码提交到目标网站的数据库中
- 用户打开目标网站的时候,服务端将评论(恶意代码)从数据库取出,返回到浏览器
- 用户浏览器收到html后,混在其中的恶意代码就会被执行
- 窃取用户数据,发送到攻击者网站
- 反射型 Server (非持久)
攻击者结合各种手段,诱导用户点击恶意url。通过url传参数的功能,比如网站的搜索或者跳转
- 攻击步骤:
- 攻击者构造自己恶意的url
- 直接执行可执行的恶意代码
- Dom型 Browser浏览器端
取出和执行恶意代码的操作,由浏览器完成,在地址栏输入javascript代码 xss-demo网址:alf.nu/alert1
const search=window.location.search;
a.href=queryObject.redirectUrl
//比如在地址栏输入以下代码 1:00
var script=document.createElement(’script’)
script=type=‘text/javascript’
scrpt.async=true
script.src=‘remote.js’//攻击者的恶意代码
var s=document.getElementByTagName(’script’)[0]
s.parent.insertBefore(script,s)
攻击步骤:
- url参数
防范xss攻击方法?
主旨:防止攻击者提交恶意代码,防止浏览器执行恶意代码
- 转译用户内容,对数据进行严格的输入编码,比如html元素,js,css,url vue html react dangerouslyHtml
- CSP Content Security Policy
- default-src ‘self‘ 所有加载的内容必须来自站点同一个源(有可信的域名在后面➕ *xxx.com
- 输入验证,严格的数据校验
- 开启浏览器的xss防御:开启http Only Cookie
- 验证码
CSRF 跨站请求伪造
corss-site request forgery
攻击步骤
- 受害者登录 a.com 并且保留了登录凭证cookie
- 攻击者诱导用户访问另一个网站 b.com,如果没安全策略限制.
- b.com 向 a.com 发送请求,浏览器会自动带上 a.com 的cookie
- 攻击者在用户不知情的情况下,冒充用户在 a.com 执行了自定义操作
攻击类型
get型 :在页面中的某个img发起一个get请求
post型:自动提交表单到恶意网站
诱导用户点击链接
防范方法-csrf
csrf一般都是发生在第三方域名,攻击者无法获取到cookie信息的。
- 同源检测
- cookie SamSite 控制cookie策略
- strict属性:完全禁用第三方cookie
- Lax:post img iframe 不会携带cookie
- None:不设置
提交请求的时候附加额外信息
- csrf token
- 用户每次打开页面的时候,服务端利用机密算法生成token
- 每次加载的时候,前端把获取到的token,在请求时候携带token
- 服务端每次接受请求后,进行校验token
- 双重cookie
- 用户在访问网站的时候,服务端向浏览器注入一个额外的cookie
- 每次发送请求,拼上去,服务端在检验
以上这么做cookie肯定不是http only,一旦遭受css攻击,cookie被窃取到,即凉凉。
- csrf token
HTTPS
CSP
内容安全策略,可以禁止加载外域的代码,禁止外域的提交
HSTS
强制客户端使用https与服务端建立连接
X-Frame-Options
控制当前页面是否被嵌入到iframe中
SRI (subresouce intergrity 子资源的完整性,传到服务器或cdn上的资源
1. xxx.js 注入到index.js ,并且上传到cdn
2. 用户在请求的时候,根据xxx.js,去请求,但是这个文件可能被篡改
3. 打包的时候根据js文件生产一个hash值,并且把hash作为intergrity属性注入到script上
4. 当浏览器在用户端请求的时候,拿到这个文件做hash,做对比,不一样,则不安全。
Referer-Policy(控制referer的携带策略)
Node(服务端)相关的安全:
本地文件操作相关,静态资源
比如提供一个静态服务,通过请求url参数来返回用户要的数据,攻击者通过请求参数输入奇怪的路径 比如:localhost:8080/?/../../text.js来查看本不应该看到的文件
- express.static
- koa-static
- resolve-path
ReDos 正则表达式攻击
利用正则表达式的回溯特点,每当一次匹配不成,就会尝试回溯到上一个字符,来验证能不能有其他组合来匹配这个字符串,会走很多步,占用服务器资源,造成宕机。
测试网站: regex.rip
时序攻击
攻击者通过不停尝试,大量推断,大量分析代码执行执行来推导出他想知道的密码或信息。
ip origin || referrer || request headers校验(防止爬虫)
实现一个截图服务
node中的:puppeter-chromium-resolver