从攻击角度和防御角度看 Web 安全:XSS、CSRF、Injection、Dos、DDos、中间人攻击
# Web 开发安全 - 笔记
# 攻击篇
# XSS
- XSS(
Cross-Site Scripting
) - 在安全内容中插入用户自己的恶意代码
- 利用了网站开发者盲目信任用户的提交内容 HTML 文档特性(string -> DOM)
# 特点
- 通常难以从 UI 上感知(暗地里执行脚本)
- 窃取用户信息(cookie/token)
- 绘制 UI(例如弹窗),诱骗用户点击 / 填写表单
# 分类
Stored XSS
- 恶意脚本被存在数据库中
- 访问页面 -> 读数据 -> 被攻击
- 危害最大,对全部用户可见
Reflected XSS
- 不涉及数据库
- 从 URL 上攻击
- 例如:
host/path/?param=<script>alert('123')</script>
DOM-based XSS
- 不需要服务器的参与
- 恶意攻击的发起 执行,全在浏览器完成
Mutation-based XSS
利用了浏览器渲染 DOM 的特性(独特优化)
不同浏览器,会有区别(按浏览器进行攻击)
例如:
代码语言:javascript复制<noscript><p title="</noscript><img src=x onerror=alert(1)>">
# CSRF
CSRF( Cross-site request forgery
)
在用户不知情的前提下
利用用户权限(cookie)
构造指定 HTTP 请求,窃取或修改用户敏感信息
例如:
代码语言:javascript复制<img style="display:none;" src="https://bank.com/transfer?to=hacker&amount=100"/>
# Injection
# SQL Injection
攻击流程:
- 请求
- SQL 参数(恶意注入)
- Server
- 拼接参数 -> 运行 SQL code
- 数据库
- 获取其他数据
- 修改数据
- 删除数据等
例如: SELECT XXX FROM ${'any; DROP TABLE table;'}
# 其他 Injection
- CLI
- OS command
- SSRF(Server-Side Request Forgery),服务端伪造请求
- 严格而言,SSRF 不是 injection,但是原理类似
例如:
const command = covert-cli video -o '${"' && rm -rf /"}'
- 请求用户自定义的 callback URL web server 通常有内网访问权限
# DoS
- DoS(
Denial of Service
) - 通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及相应更多请求,导致请求挤压,进而雪崩
例如:
- 基于正则表达式的 DoS(利用正则表达式贪婪模式)
/^((ab)*) $/
- 构造
"abababababababa"
- 造成算法多次回溯,导致响应时间