这是我参与「第四届青训营 」笔记创作活动的第1天
XSS 攻击
- 客户端提交一个 script 脚本,其他用户渲染时将 script 脚本渲染到网页中。
- 永远不要相信用户提交的所有内容,永远不要讲用户提交的内容直接转化成为 DOM。
- 前端:主流框架默认会防御,或者利用 google-closure-library 防御。
- 后端(Node):使用 DOMPurify等。
- 注意
string->DOM,svg,自定义跳转链接,自定义样式。
Stored XSS
脚本存储在服务器数据库中,任何人读取渲染都会导致被攻击。
Reflected XSS
不涉及到数据库,参数被服务端渲染,用户访问页面的时候直接导致被攻击。
Dom-based XSS
不涉及服务端,用户端主动读取参数并渲染。
Mutation-based XSS
利用浏览器渲染过程进行攻击,例如拼凑浏览器的 title 属性使得注入恶意脚本。
CSRF:跨站伪造请求
恶意页面中构造 HTTP 请求,访问其他网站接口(例如转账接口),进而实现攻击。用户没有访问页面,只是间接请求了接口。
利用 img.src, form input 等构造请求。
- 利用浏览器的同源策略。
- 利用 token:API 需要携带用户 token,以此进行验证。
- X-Frame-Options:防止 iframe 攻击。
- 利用 SameSite Cookie.
- 插入一个 CSRF 防御中间件。
SQL 注入
恶意构造 SQL 语句。
使用 prepared statement.
CLI Injection
服务端构造的 cli-command 被恶意注入代码。
- 最小权限原则,尽量不给 sudo / root。
- 建立白名单机制,只允许制定命令。
- 对 URL 参数进行协议、域名、IP 限制。
SSRF
用户端构造恶意参数,使得服务端发起恶意网络请求。由于服务端具有内网访问权限,从而暴露内网信息。
DOS 服务拒绝
攻击者通过某种方式挤占服务端资源,导致正常的请求无法被解析。
基于正则表达式的DOS
利用正则表达式匹配的回溯模式,恶意构造复杂的字符串结构浪费计算资源,进而发起攻击。
- 在 code review 的时候检查贪婪匹配
- 使用代码扫描工具与正则性能测试
- 拒绝使用用户的正则表达式
DDOS——分布式DOS攻击
使用大量设备短时间内请求,导致服务器端无法解析正常请求。
- 利用 TCP 三次握手:只发送第一次 SYN 报文。
- 负载均衡(识别,拒绝)
- API网关(识别,拒绝)
- CDN(抗量)
- 快速自动扩容(抗量)
- 非核心业务降级(抗量)
中间人攻击
在浏览器和服务器中间插入一个中间人,中间人间接将浏览器的输入信息恶意构造发给服务器,并将接收到的内容恶意篡改。
- 明文传输(可以看到)
- 篡改不可知(不知道被改了)
- 身份未验证(不知道谁发的)
利用 HTTPS
- 加密
- 完整性:同时发送 content 和 hash,接收端需要对比。
- 不可抵赖:依靠数字签名和 CA。
\