本文档全面概述了后端系统架构中至关重要的安全概念、技术和实现。它涵盖了Web应用程序安全、网络保护措施、数据安全实践、身份验证和授权机制以及服务器安全强化技术。重点在于实际安全模式及其实现,以保护系统免受常见威胁和漏洞的侵害。
有关中间件中特定安全实现的详细信息,请参阅基础设施与运营。有关网络协议安全的具体信息,请参阅网络与通信。
安全架构组件
来源:README.md:225-253
Web安全侧重于保护Web应用程序免受利用应用程序代码、用户界面和相关服务中漏洞的攻击。
XSS是一种客户端注入攻击,恶意脚本被注入到受信任的网站中。当最终用户访问受感染的页面时,这些脚本就会执行。
防范实现
| 防范技术 | 描述 | 实现 |
|---|---|---|
| 输入验证 | 验证输入是否符合预期格式 | 对接受的字符采用白名单方式 |
| 输出编码 | 编码特殊字符 | 在将动态内容插入HTML之前进行HTML编码 |
| CSP | 定义受信任的内容来源 | 添加Content-Security-Policy HTTP头 |
| HttpOnly Cookie | 防止JS访问Cookie | 对敏感Cookie设置HttpOnly标志 |
| X-XSS-Protection | 启用浏览器保护 | 添加X-XSS-Protection: 1; mode=block头 |
来源:README.md:227
CSRF攻击强制已认证用户向Web应用程序提交非预期请求。这些攻击利用了Web应用程序对用户浏览器的信任。
CSRF防护实现
| 防护技术 | 描述 |
|---|---|
| Anti-CSRF令牌 | 为每个会话/表单生成唯一令牌,并在提交时验证 |
| SameSite Cookie | 为Cookie设置SameSite=Strict或Lax属性 |
| 自定义标头 | 要求X-Requested-With头(AJAX请求自动包含) |
| Referer验证 | 根据允许域的白名单检查Referer头 |
来源:README.md:228
SQL注入发生在将不可信数据作为命令或查询的一部分发送给解释器时,这允许攻击者执行非预期命令或访问未经授权的数据。
防范技术
| 技术 | 描述 | 示例 |
|---|---|---|
| 参数化查询 | 使用带有绑定变量的预处理语句 | preparedStatement.setString(1, userInput) |
| ORM框架 | 使用处理SQL转义的框架 | Hibernate, MyBatis |
| 输入验证 | 验证用户输入的类型、长度、格式 | 使用正则表达式验证输入格式 |
| 最小权限 | 限制数据库账户权限 | 为查询操作创建只读账户 |
| 错误处理 | 防止数据库错误详情泄露 | 使用自定义错误页面/消息 |
来源:README.md:229
哈希DoS(拒绝服务)攻击通过创建哈希冲突来利用可预测的哈希函数,这会显著降低基于哈希的数据结构的速度并导致资源耗尽。
Java实现保护
Java 7+包含哈希随机化,以防范哈希DoS攻击。在旧版本的Java中,务必通过-XX:+UseRandomizedHashCodes JVM标志确保其启用。
来源:README.md:230-231
脚本注入涉及通过未净化的输入(特别是可后续执行的文件上传)将恶意代码插入应用程序。
文件上传安全措施
| 措施 | 描述 |
|---|---|
| 文件类型验证 | 验证文件扩展名和MIME类型 |
| 内容验证 | 检查文件内容是否与声明类型匹配 |
| 文件重命名 | 删除或净化原始文件名 |
| 存储位置 | 存储在Web根目录之外的位置或使用专用文件服务器 |
| 执行预防 | 禁用上传目录的执行权限 |
| 杀毒扫描 | 扫描上传文件以查找已知恶意软件 |
来源:README.md:232
CAPTCHA(完全自动化公共图灵测试,用于区分计算机和人类)系统区分人类用户和自动化机器人。
现代CAPTCHA风险分析因素
| 因素 | 描述 |
|---|---|
| 响应时间 | 过快可能表明自动化 |
| 鼠标移动 | 自然模式与程序化模式 |
| 浏览器指纹 | 已知机器人指纹 |
| IP信誉 | 可疑活动历史 |
| 用户行为 | 页面导航模式 |
来源:README.md:233
网络安全保护网络基础设施、连接以及通过网络传输的数据。
DDoS(分布式拒绝服务)攻击试图通过来自多个来源的流量淹没在线服务,使其无法使用。
DDoS缓解策略
| 策略 | 描述 | 实现 |
|---|---|---|
| 流量清洗 | 过滤恶意流量 | 专业DDoS防护服务 |
| 速率限制 | 限制请求速率 | 在Web服务器/应用层面配置 |
| 过度配置 | 增加容量 | 扩展基础设施以吸收攻击 |
| CDN实现 | 分发流量 | 实施全球CDN服务 |
| Anycast网络 | 分发到多个位置 | 用于流量分发的DNS配置 |
来源:README.md:234
网络隔离将网络分段,以减少攻击面并遏制潜在的入侵。
实施技术
| 技术 | 描述 |
|---|---|
| DMZ(非军事区) | 公共互联网和私有网络之间的缓冲区 |
| VLAN分段 | 网络流量的逻辑分离 |
| 防火墙规则 | 控制网络分段之间的流量 |
| 微隔离 | 在单个工作负载级别的细粒度安全策略 |
| 堡垒主机 | 用于管理功能的强化访问点 |
来源:README.md:244-246
数据安全确保数据在其整个生命周期(从创建到删除)中都受到保护。
加密转换数据,使其在没有正确解密密钥的情况下无法读取。
对称加密与非对称加密
| 方面 | 对称 | 非对称 |
|---|---|---|
| 密钥用法 | 加密和解密使用相同密钥 | 不同密钥(公钥/私钥对) |
| 速度 | 更快 | 更慢 |
| 密钥分发 | 困难(需要安全通道) | 容易(公钥可共享) |
| 可扩展性 | n个用户需要n(n-1)/2个密钥 | n个用户需要2n个密钥 |
| 常见算法 | AES、3DES、Blowfish | RSA、DSA、ECC |
| 典型用途 | 批量数据加密 | 密钥交换、数字签名 |
哈希算法比较
| 算法 | 输出大小 | 安全状态 | 用途 |
|---|---|---|---|
| MD5 | 128位 | 已破解,易受碰撞攻击 | 不建议用于安全用途 |
| SHA-1 | 160位 | 已弃用 | 不建议用于安全用途 |
| SHA-256 | 256位 | 目前安全 | 推荐用于大多数应用 |
| SHA-3 | 可变 | 高度安全 | 推荐用于高安全需求 |
| bcrypt/Argon2 | 可变 | 专为密码哈希设计 | 密码存储 |
来源:README.md:237-240
用户隐私保护旨在保护个人身份信息(PII)免受未经授权的访问和滥用。
隐私保护最佳实践
密码保护
PII脱敏
用户控制
数据收集原则
来源:README.md:235
序列化漏洞发生在不可信数据被反序列化时,这可能导致代码执行或其他攻击。
防范实现
| 技术 | 描述 |
|---|---|
| 输入验证 | 在处理前验证序列化数据 |
| 完整性检查 | 使用密码签名验证数据未被篡改 |
| 类白名单 | 限制反序列化到特定的受信任类 |
| 替代格式 | 使用更安全的数据交换格式(JSON、带验证的YAML) |
| 序列化过滤器 | 使用特定于语言的过滤器(例如,Java中的ObjectInputFilter) |
来源:README.md:236
身份验证验证身份(你是谁),而授权确定访问权限(你能做什么)。
双因素认证(2FA)实现
| 2FA方法 | 描述 | 安全级别 |
|---|---|---|
| 短信验证码 | 通过短信发送的一次性代码 | 中等(易受SIM卡交换攻击) |
| 身份验证器应用 | 基于时间的一次性密码(TOTP)生成器 | 高 |
| 硬件令牌 | 生成安全代码的物理设备 | 非常高 |
| 推送通知 | 发送到受信任设备的批准请求 | 高 |
| 生物识别+密码 | 结合内在和知识因素 | 非常高 |
单点登录(SSO)流程
来源:README.md:247-253
RBAC(基于角色的访问控制)
RBAC基于角色而非单个用户分配权限,从而简化了访问管理。
| 实体 | 描述 | 示例 |
|---|---|---|
| 用户 | 单个系统用户 | john_smith |
| 角色 | 权限集合 | 编辑者, 管理员, 查看者 |
| 权限 | 可执行的操作 | 读取文档, 编辑用户 |
| 资源 | 被访问对象 | 客户数据, 财务报告 |
OAuth 2.0流程
| 流程类型 | 用例 | 安全考量 |
|---|---|---|
| 授权码 | Web 应用程序 | 最安全的流程,需要后端通道 |
| 隐含的 | JavaScript/SPA | 安全性较低,无刷新令牌 |
| 资源所有者密码 | 受信任的第一方应用 | 需要直接处理凭据 |
| 客户端凭据 | 机器到机器 | 无用户上下文 |
OIDC与SAML比较
| 方面 | OpenID Connect | SAML |
|---|---|---|
| 协议 | 基于REST/JSON | 基于XML |
| 复杂性 | 更简单,轻量级 | 更复杂 |
| 用例 | 移动、Web应用 | 企业、跨域SSO |
| 令牌格式 | JWT | XML断言 |
| 发现 | 动态发现 | 元数据交换 |
来源:README.md:248-251
服务器安全涉及保护服务器硬件、软件和数据免受威胁。
服务器强化策略
| 策略 | 实现 |
|---|---|
| 最小化攻击面 | 移除不必要的服务、应用程序和端口 |
| 定期更新 | 为操作系统和应用程序实施补丁管理系统 |
| 安全配置 | 遵循安全基准(CIS, NIST) |
| 访问控制 | 使用强认证,实施最小权限 |
| 文件系统安全 | 设置适当权限,加密敏感数据 |
| 网络安全 | 配置基于主机的防火墙,网络分段 |
| 监控与日志 | 实施集中式日志记录,监控可疑活动 |
堡垒主机实现
来源:README.md:241-246
网络隔离将网络分段,以限制入侵的传播并减少攻击面。
关键实现技术
| 技术 | 描述 |
|---|---|
| DMZ | 互联网与私有网络之间的缓冲区 |
| 防火墙规则 | 控制网络分段之间的流量 |
| VLAN分段 | 网络流量的逻辑分离 |
| 跳转服务器 | 用于管理功能的强化访问点 |
| 网络访问控制 | 控制设备对网络的访问 |
来源:README.md:244-246
安全是后端架构的一个基础方面,需要采取纵深防御的方法。通过在Web应用程序、网络、数据存储系统和访问控制机制中实施分层安全措施,组织可以构建弹性系统,从而在保护系统免受不断演变的威胁的同时,保持功能性和性能。
持续警惕、定期安全评估以及及时了解新兴威胁和对策是长期保持强大安全态势的重要实践。