这是我参与「第五届青训营」伴学笔记创作活动的第11天
一、本堂课重点内容:
二、详细知识点介绍:
-
XSS —— 跨站脚本攻击
-
攻击
-
后果
用户隐私泄露
-
缘由
1、盲目信任用户提交内容,没有过滤内容
2、string -> DOM
-
特点
1)通常难以从UI上感知(暗地执行脚本)
2)窃取用户信息(cookie / token)
3)绘制UI(例如弹窗) ,诱骗用户点击/填写表单
-
类型
1)存储型 —— Stored XSS
恶意脚本被存在数据库中 访问页面 -> 读数据 = 被攻击 危害最大,对全部用户可见2) 反射性 —— Reflected XSS
不涉及数据库 从URL上完成攻击3)基于DOM —— DOM-based XSS
不需要服务器的参与 恶意攻击的发起与执行全部在浏览器完成 (执行环境发生变化,URL)反射性XSS与基于DOM XSS对比,区别在于注入脚本的地方,前者于服务端注入,后者于浏览器端完成
4)基于MUtation —— Mutation-based XSS
利用浏览器渲染DOM的特性(独特优化) 不同浏览器会有区别(按浏览器进行区别攻击)
-
-
防御
不信任用户的提交内容+不将用户提交的内容直接转换为DOM
-
现成工具
前端
主流框架(VUE)默认防御XSS google-closure-library服务端(Node)
DOMPurify -
强行转换内容的补救操作(String -> DOM)
1)对string进行转译
2)上传svg时进行扫描
3)尽量拒绝用户自定义跳转,做好内容过滤
-
-
-
CSRF —— 跨站伪造请求
-
攻击
- 特点 构造任意请求
1)在用户不知情的前提下
2)利用用户权限(cookie)
3)构造指定HTTP请求,窃取或修改用户敏感信息
-
防御
1)限制Origin,验证header字段
if 伪造请求=异常来源 then 限制请求来源→限制伪造请求 - Origin -同源请求中,GET + HEAD不发送 -Referer2)token令牌机制
标记token(与具体用户绑定且有过期时间)3)SameSite Cookie
限制 Cookie domain 页面域名
-
-
Injection
-
攻击
- 类型
SQL Ingection
命令行(CLI)
系统命令(OS command)
SSRF(不是injection但是原理类似)
-
防御
-
以SQL为例
找到项目中查询SQL的地方
使用prepared statement(即提前将SQL写好)
-
具体操作
最小权限原则
不给root权限白名单机制
只允许指定命令去进行对URL类型参数进行协议、域名、IP等限制
-
-
-
DoS —— 服务拒绝
通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。
-
攻击
-
类型
ReDoS —— 基于正则表达式的DoS
基于贪婪匹配的回溯行为 服务器响应时间大大延长,接口吞吐量明显降低,相应用户的请求次数降低DDoS(最常见)
短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求
具体特点:
1)耗时的同步操作 2)数据库写入 3)SQL join 4)文件备份 5)循环执行逻辑主要目的:消耗带宽
-
-
防御
正则表达式
完善code review 代码扫描+正则性能测试 拒绝使用用户提供的正则DDoS
1、流量治理(过滤) 1)负载均衡 2)API网关 2、抗量 1)前置CDN 2)快速自动扩容 3)非核心服务降级
-
-
中间人攻击
-
攻击
窃取信息
修改请求、返回
-
缘由
明文传输
信息篡改不可知
未验证对方身份
-
-
防御 —— 中间人
HTTPS
特性: 可靠性:加密(避免明文传输) 完整性:MAC验证(确保信息未被篡改) 不可抵赖性:数字签名(验证对方身份)HSTS —— 将HTTP主动升级到HTTPS
缺点:需要先有一次HTTPS请求
-