这是我参与「第四届青训营 」笔记创作活动的的第6天
攻击者
xss攻击
-
在页面中注入恶意的脚本从而攻击
-
利用开发者的信任,直接转化字符串为dom
-
特点
-
- 难以从UI上感知
- 窃取信息(cookie/token)
- 绘制UI从而诱导用户
-
比如在提交时
-
fetch("submit",{ body:JSON.stringify({ id:"1", content:`<script>alert("xss");<script>` }) }) -
这就使得当这段信息展示时键入脚本
-
存储型xss:恶意脚本存到数据库中,危害最大(对全部用户可见)
-
反射性xss:从URL攻击,修改URL中的参数命中xss代码
-
基于dom:在浏览器中从url的参数读取值实现,类似反射型,只不过在浏览器中注入
-
基于mutation攻击,按浏览器区别攻击。
CSRF
- 在用户不知情的前提下,利用用户权限构造指定HTTP请求窃取信息
- 比如恶意页面,用户一点击就触发某个恶意api
注入
- 如:在请求上注入sql参数,导致服务端进行了某些数据库操作
- CLI注入
- OS command注入
- SSRF服务端伪造请求:攻击者进入内网
DOS
- 攻击者疯狂请求使得服务器无法响应
- 基于正则:/^((ab)*)+$/,攻击者发送一个容易造成回溯行为的字符串导致匹配查找次数过多
- DDoS:不搞复杂的,量大就完事
- 特点:直接范围IP,任意api,耗尽带宽
- 构造大量TCP,发大量SYN,当不进行第三次握手,连接无法释放,服务器卡在最大连接
基于传输层
- 中间人攻击方式:B/S插一个中间人窃取信息
-
- 利用了名文传输
- 信息篡改不可知
- 身份不加验证
防御者
xss
- 不要相信用户的提交
- 认为用户提交的内容是string而非dom
- 现代框架和浏览器都有现成防御工具,服务端有DOMPurify
- string->DOM 对string转义
- svg 进行扫描
- 尽量不要允许用户自定义链接,允许要进行扫描
- 同源策略
- CSP策略:定义哪些域名和脚本可以执行,对eval和某些内联标签直接拒绝
CSRF
- 如果伪造请求是异常来源就拒绝
- 利用token,和具体用户绑定
- iframe攻击:iframe的请求是同源请求,可以利用一个响应头部设置X-Frame-Options:对iframe进行限制
- SameSite Cookie:页面cookie只能为我所用
- node方面:利用中间件
注入
- 找到代码中的sql部分,提前编译导致sql注入无法实现
- 不要提供root权限
- 建立白名单
- 对URL类型进行限制
- 利用扫描工具防止低效正则或拒绝用户正则
- DDoS:负载均衡、API网关、CDN、快速自动扩容、非核心业务降级
中间人
- HTTPS
- 可靠(加密)、完整(MAC验证)、不可抵赖(数字签名)
- TLS握手
![T0)0]ZPREE}P5)$_328XEG0.png](p1-juejin.byteimg.com/tos-cn-i-k3…?)
思考
为什么安全永远是我们需要考虑的问题,这里我引用我的OS老师说过的一个有哲学意义的解释:你的系统是一个由点构成的圈,攻击者可以从任何一个地方攻击,但你的防御是那些点。我们不可能解决所有的漏洞,安全就是攻击和防御不断比拼的过程。