这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
网络安全问题似乎自从网络诞生之初就存在了,直到现在仍有相当多的安全问题困扰着开发者和用户。感觉这是一节很重要又很有趣的一堂课。
案例
- 2021年发生过steam免费充值的安全事件
- 2022年发生过xxt泄漏学生信息事件
安全问题通常危害:
- 用户
- 公司
- 程序员(祭天)
攻击篇
XSS
cross-site scripting 跨站脚本攻击,页面中注入恶意脚本,用户打开网页后运行。开发者盲目信任用户提交内容,其中包括一些可执行脚本。
特点:
- UI无法感知
- 窃取cookie/token
- 绘制UI诱骗用户点击填写表单
分类
- stored XSS
- 脚本存到数据库中
- 访问页面->读数据->被攻击
- 对所有用户可见
- reflected Xss
- 不涉及数据库
- 从URL攻击(请求参数)
- DOM-based XSS
- 不需要服务器参与
- 攻击发起和执行在浏览器完成
- mutation-based XSS
- 利用浏览器渲染特性
- 按浏览器攻击
CSRF
cross-site request forgery 跨站伪造请求
特点
- 用户不知情前提下
- 利用用户权限(cookie)
- 构造制定http请求,窃取信息
Injection
注入攻击
分类:
- SQL 注入
- CLI 客户端
- OS command 系统命令
- server-side request forgery (SSRF) 服务端伪造请求,不一样但原理类似
DoS
Denial of Service 服务拒绝,通过一些方式导致服务器资源过度消耗导致请求挤压。
分类:
- ReDoS 基于正则表达式的DoS
- Distributed DoS(DDoS) 大量僵尸设备请求
- Logical DoS
- 耗时的同步操作
- 数据库写入
- SQL join
- 文件备份
- 循环执行逻辑
中间人攻击
浏览器和服务器中间插入中间人,看数据,改数据
防御篇
XSS
- 永远不要相信用户提交的内容
- 不要将提交内容转成DOM
现成工具
- 主流前端框架默认防御
- google-closure-library
- DOMPurify(node)
CSRF
特判合法来源的请求
- Origin + Referrer
- 先有页面后有请求
- token绑定+过期时间(向前保密)
- 开发时注意借口等使用规范
- SameSite(cookie对应页面域名) / CORS(类似白名单)
- 设置中间件解决所有csrf问题
Injection
- 在使用sql查询的地方使用预处理
- 所有命令不用sudo
- 删除命令建立名单
- 内网访问限制
DoC
- 规范正则表达式代码,代码扫描,不用用户提供的表达式
- DDoS进行过滤,抗量
中间人
- HTTPS,HTTP3
- SRI 对比hash