攻击篇
Cross-Site Scripting(XSS)
跨站脚本攻击
开发者:
- 盲目信任用户提交的内容
- 把用户提交的字符串直接渲染进了DOM
特点
- 通常难以从UI上感知(暗地执行脚本)
- 窃取用户信息(cookie/token)
- 绘制UI(例如弹窗),诱骗用户点击/提交表单
攻击者
- 可以直接提交恶意脚本
Stored XSS
存储型XSS
- 恶意脚本被存进数据库中
- 访问页面--》读数据=被攻击
- 危害最大,全部用户可见
Reflected XSS
反射型XSS
- 不涉及数据库
- 从URL上攻击 在服务端进行注入
DOM-based XSS
- 不需要服务器的参与
- 恶意攻击的发起 + 执行,全在浏览器完成 在浏览器完成整个闭环
Mutation-based XSS
- 利用了浏览器渲染 DOM 的特性(独特优化)
- 不同浏览器,会有区别(按浏览器进行攻击)
Cross-site request forgery(CSRF)
跨站伪造请求
- 在用户不知情的前提下
- 利用用户权限(cookie)
- 构造指定HTTP请求,窃取或修改用户敏感信息
常用GET请求,也可用其他请求
Injection
注入
SQL Injection
恶意的SQL参数,更改数据库
Injection 不止于 SQL
- CLI
- OS command
- Server-Side Request Forgery(SSRF),服务端伪造请求
- 严格而言,SSRF不是injection,但是原理类似
Denial of Service(DoS)
服务拒绝 通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不相应更多请求,导致请求挤压,进而雪崩效应。
ReDOS:基于正则表达式的DoS
回溯正则表达式
Distributed DoS(DDoS)
短时间内来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求 攻击特点
- 直接访问IP
- 任意API
- 消耗大量带宽(耗尽)
中间人攻击(传输层)
- 明文传输
- 信息篡改不可知
- 对方身份未验证
防御篇
XSS
- 永远不信任用户提交的内容
- 不要将用户提交的内容直接转换成DOM
现成工具
前端
- 主流框架默认防御 XSS
- google-closure-library 服务端(Node)
- DOMPurify
如果非要动态生成DOM,要注意:
- string-->Dom。对string进行转义
- 上传svg。对svg进行扫描,因为svg里允许插入js脚本,所以要进行扫描
- 自定义跳转连接。做好过滤
- 自定义样式
CSRF 的防御
Origin+Referer
if 伪造请求 = 异常来源
then 限制请求来源 -->限制伪造请求
- Origin
- 同源请求中,GET + HEAD 不发送
- Referer
token
先有页面,再有请求
if 请求来自合法页面
then 服务器接受过页面请求
then 服务器可以标
- 用户绑定:攻击者也可以是注册用户 === 可以获取自己的token
- 过期时间:前向保密
iframe攻击
设置 X-Frame-Option:DENY(禁止作为Iframe)/SAMEORIGIN(允许同源)
anti-pattern
GET!==GET+POST get的接口不要做修改数据的行为
SanmeSite Cookie 根源解决 CSRF
限制的是:
- Cookie domain
- 页面域名
防御CSRF的正确姿势
写一个中间件
SameSite vs CORS
SameSite CORS(跨域资源共享)
- Cookie 发送 资源读写(HTTP请求)
- domain vs 页面域名 资源域名 vs 页面域名
- "出了屋就不认了" 白名单
Injection
SQL Injection
-
找到项目中查询SQL的地方
-
使用 prepared statement
-
最小权限原则
- sudo || root
-
建立允许名单 + 过滤
- rm
-
对URL类型参数进行协议、域名、ip等限制
Regex Dos
- Code Review
- 代码扫描 + 正则性能测试
- x用户提供的使用正则
DDoS
- 流量治理
- 负载均衡 -- > 过滤
- API网关 --> 过滤
- CDN -----> 抗量
- 快速自动扩容 ---> 抗量
- 非核心服务降级--->抗量
传输层--防御中间人
HTTPS = HTTP + TLS(HTTP3已经内置TLS)
- 可靠性:加密
- 完整性:MAC验证
- 不可依赖性:数字签名
Same-origin Policy 同源策略(SOP)
- 协议
- 域名
- 端口
Content Security Policy(CSP)
- 哪些源(域名)被认为是安全的
- 来自安全源的脚本可以执行,否则直接抛错
- 对 eval + inline script 说 达咩
可以在服务器响应头部设置,浏览器meta标签设置