文章目录
- 前言
- 一、web开发安全 - 攻击
- 1. Cross-Site Scripting(XSS)
- 1.1 存储型(Stored Xss)
- 1.2 反射型(Reflect Xss)
- 1.3 DOM型(DOM Xss)
- 1.4 Mutation-based XSS
- 2. Cross-Site Request Forgery(CSRF)
- 3. SQL Injection
- 4. Server-Side Request Forgery(SSRF)
- 5. Denial of Service(DoS)
- 6. Distributed DoS(DDoS)
- 二、web开发安全 - 防御(开发者注意)
- 1. XSS防御
- 1.1 现成工具
- 1.2 注意点
- 1.3 Content Security Policy(CSP)
- 2. CSRF防御
- 避免携带 SameSite Cookie
- 3. injection 防御
- 3.1 sql injection
- 3.2 injection beyond SQL
- 4. DOS 防御
- 4.1 DDOS
- 5. 通过传输层防御(HTTPS)
前言
仅以此文章记录学习。
一、web开发安全 - 攻击
1. Cross-Site Scripting(XSS)
跨站脚本攻击
是针对用户层面的攻击。
恶意攻击者会往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!
特点:
- 通常难以从 UI上感知(暗地执行脚本
- 窃取用户信息 (cookie/token)
- 绘制 UI(例如弹窗),诱骗用户点击/填写表单
1.1 存储型(Stored Xss)
持久化
- 恶意脚本被存在数据库中
- 用户访问页面 -> 读数据 === 被攻击
- 危害最大,对全部用户可见
容易造成蠕虫,盗窃cookie
1.2 反射型(Reflect Xss)
非持久化
- 不涉及到数据库
- 从URL上攻击,一般容易出现在搜索页面
反射型XSS大多数是用来盗取用户的Cookie信息
1.3 DOM型(DOM Xss)
不经过后端
- 不需要服务器的参与
- 恶意攻击的发起+执行,全在浏览器完成
document.referer
window.name
location
innerHTML
documen.write
可能触发DOM型XSS的属性
1.4 Mutation-based XSS
- 利用了浏览器染 DOM的特性(独特优化)
- 不同浏览器,会有区别(按浏览器进行攻击)
2. Cross-Site Request Forgery(CSRF)
跨站请求伪造
- 在用户不知情的前提下
- 利用用户权限(cookie)
- 构造指定HTTP请求,窃取或修改用户敏感信息
3. SQL Injection
SQL注入
4. Server-Side Request Forgery(SSRF)
服务端伪造请求
攻击者伪造服务端的请求发起攻击,借由服务端为跳板来攻击目标系统
5. Denial of Service(DoS)
拒绝服务攻击
通过某种方式(构造特定请求),导致服务器资源被显著消耗来不及响应更多请求,导致请求挤压,进而雪崩效应。
6. Distributed DoS(DDoS)
分布式拒绝服务攻击
攻击特点:
- 直接访问IP
- 任意API
- 消耗大量带宽(耗尽)
短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积
,进而雪崩效应,无法响应新请求。
二、web开发安全 - 防御(开发者注意)
1. XSS防御
永远不要信任用户提交的内容,不要将用户提交的内容直接转换成DOM
(可以把他当作字符串对待)
1.1 现成工具
前端:
- 主流框架默认防御XSS
- google-closure-library
服务端 (Node):
- DOMPurify
1.2 注意点
- 尽量不要动态生成DOM
- 若有String转换为DOM操作,需要提前将String进行转译
- 如果允许用户上传SVG文件/图片,则需要对其进行一次扫描(SVG文件内是允许嵌套script代码)
- 尽量不要做让用户自定义跳转这类行为,如果要做得需要做好过滤(允许自定义跳转的话实际上会传递js代码)
- 如果允许用户自定义样式,则需要对能够附带URL的属性进行过滤(Background:url(xxx/xxx.png))
1.3 Content Security Policy(CSP)
内容安全策略
- 哪些源(域名)被认为是安全的
- 来自安全源的脚本可以执行,否则直接抛错
- 对 eval + inline script 说
2. CSRF防御
判断浏览器是否同源
要求用户带上Token去请求接口
避免携带 SameSite Cookie
3. injection 防御
3.1 sql injection
- 找到项目中查询SQL的地方,使用 prepared statement
3.2 injection beyond SQL
- 最小权限原则 :sudo root
- 建立允许名单 + 过滤:rm
- 对URL类型参数进行协议、域名、ip 等限制:访问内网
4. DOS 防御
- 完善代码Code Review的方式,避免写出贪婪匹配的方式(/(ab*)+/)
- 代码扫描 + 正则性能测试
- 拒绝用户提供的正则表达式
4.1 DDOS
- 流量控制(过滤):负载均衡,API网关,CDN
- 快速自动扩容,非核心服务降级(扛量)
5. 通过传输层防御(HTTPS)
HTTPS:HTTP+TLS
特点:
- 可靠性:加密(拒绝明文)
- 完整性:MAC验证(防篡改)
- 不可抵赖性:数字签名 (验证身份)
完整性:
数字前面:
HTTP3(QUIC)也内置了TLS1.3