Web安全防护开发 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第8天。今天的课程围绕前端开发中网络编程的安全性展开。
同源策略
同源策略:protocol(协议)、domain(域名)、port(端口)三者必须一致。
同源政策的目的主要是为了保证用户的信息安全,它只是对 js 脚本的一种限制,并不是对浏览器的限制,对于一般的 img、或者script 脚本请求都不会有跨域的限制,这是因为这些操作都不会通过响应结果来进行可能出现安全问题的操作。
XSS攻击
XSS 攻击指的是跨站脚本攻击,是一种代码注入攻击。攻击者通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户的信息如 cookie 等。
XSS 的本质是因为网站没有对恶意代码进行过滤,与正常的代码混合在一起了,浏览器没有办法分辨哪些脚本是可信的,从而导致了恶意代码的执行。
存储式
- 通过数据库注入,将恶意脚本伴随输入框插入数据库中。
- 定时访问页面,读取数据库数据发送到指定服务器。
- 存储式XSS使危害最大的XSS攻击
响应式
直接从URL上携带参数攻击,涉及数据库
基于DOM的XSS
不需要服务器参与,通过浏览器发起、执行恶意脚本。
基于渲染机制Mutation的XSS
利用了浏览器对DOM渲染的特性 不同的浏览器有有区别
防御方式
- 永远不要信任用户提交的内容,即不要直接将用户内容转为动态DOM,而是用String形式储存。
- 当用户应用需求需要使用到动态DOM时间,应该设置逻辑对上传DOM和解析DOM进行转义
new DOMOarse() - 对于svg文件的上传应该尤其的注意防护,svg文件可以内嵌js脚本。
- 尽量不要允许用户自定义跳转(JS)、自定义样式也不行。
CSRF攻击
CSRF 攻击指的是跨站请求伪造攻击,攻击者诱导用户进入一个第三方网站,然后该网站向被攻击网站发送跨站请求。如果用户在被攻击网站中保存了登录状态,那么攻击者就可以利用这个登录状态,绕过后台的用户验证,冒充用户向服务器执行一些操作。
CSRF 攻击的本质是利用 cookie 会在同源请求中携带发送给服务器的特点,以此来实现用户的冒充。
防御方式
-
通常网络请求有四种防御策略
- if 伪造请求 === 异常来源
- then 限制请求来源
- Origin 同源请求中,不发送GET+HEAD
- Referer
-
CSRF - token防护
-
除了Origin+Referrer 其他熬吧打一把【请求来自于合法来源】的方式
-
先有页面,后有请求
- if 请求来自合法页面
- then 服务器接受页面请求
- then 服务器可以识别
-
token验证是通过唯一的加密信息码与用户绑定,每次请求都需要将这个加密码随着请求发送到服务器,服务器解密比对信息后判断是否是用户本人操作。
-
token验证码会设置过期时间,避免token泄露。
-
-
CSRF - iframe 攻击
- 当Origin被限制时,攻击者会将请求包在内作为子页面,即可突破同源
-
CSRF 防护
- 避免GET接口和POST接口合并等偷懒行为
- 防护SameSIte Cookie信息泄露,SameSite Cookie依赖于第三方的Cookie请求,需要允许第三方域名采集Cookie.
- 防御CSRF需要注意逐级施加权限限制
SQL Injection攻击
- SQL Injection又叫做数据库注入,通常直接在请求体中写SQL参数或者SQL命令,已达到清楚数据库、转发、修改数据的目的。
- 注入攻击不仅可以用于SQL服务端,在CLI脚手架、OS命令行等都可以运用。
- SSRF(Server-Side Request Forgery)严格来说不算注入,但原理相似。
防御方式
- 最小原则:避免使用sudo || root 命令
- 建立ip白名单,拒绝异常rm操作
- 对URL类型参数、域名、IP加逻辑检验,限制异常请求———防范内网被突破
- DoS攻击
- 通过过载请求使得服务器资源被过度消耗而崩溃
- 正则表达式:贪婪模式
ReDoS:n次不行?试试n-1次——回溯
DoS攻击分类
- ReDoS:基于正则表达式的DoS:
- L-DoS (Logical DoS) 通常以循环执行逻辑、执行SQL登录、数据库写入、文件备份等大量耗时的同步操作。
- DDoS (Distributed DoS):通过服务器任意API直接访问IP,占用带宽使得服务器宕机。DDoS利用TCP的三次握手原理,反复来回交换数据占用带宽。
- 中间人攻击: 俗称“肉鸡”,利用Web的明文请求,无法验证请求端身份与其请求体是否含篡改内容。
防御方式
-
ReDoS
- 减少允许用户使用正则表达式请求
- 增加校验, 对代码做扫描 +正则性能测试
-
L-DoS
- 限流: 限制流量的异常波动,对于异常IP封锁。
- 并不是非黑即白: 有时候需要请求量超过阈值才能检测出L-DoS
- 分析代码的性能瓶颈:同步调用、串行逻辑、CPU密集操作
-
DDoS
- 过滤:负载均衡、API网关
- 抗量:CDN、快速扩容、 非核心服务降级备战
-
中间人防御
- HTTP特性: 可靠性-明文加密,完整性:MAC验证;不可抵赖性-数字签名
- HTTPS加密:在三次握手时进行hash加密,利用公钥和证书进行数字签名校验。
- 将HTTP主动升级到HTTPS:需要之前要有一次HTTPS访问
- 当静态资源被劫持篡改了,可以运用SRI对资源做hash验证。
个人总结
学习了今天的课程,弥补了我在前端安全认识的空缺。今天课程满满都是干货,无论是在HTML还是JS代码上,都可以找到安全漏洞。同时也知道了该在什么情况下注意代码容易被被攻击,在之后写代码时会尽力优化。