菜单

安全

相关源文件

目的与范围

本文档全面概述了后端系统架构中至关重要的安全概念、技术和实现。它涵盖了Web应用程序安全、网络保护措施、数据安全实践、身份验证和授权机制以及服务器安全强化技术。重点在于实际安全模式及其实现,以保护系统免受常见威胁和漏洞的侵害。

有关中间件中特定安全实现的详细信息,请参阅基础设施与运营。有关网络协议安全的具体信息,请参阅网络与通信

安全架构概述

安全架构组件

来源:README.md:225-253

Web安全

Web安全侧重于保护Web应用程序免受利用应用程序代码、用户界面和相关服务中漏洞的攻击。

XSS (跨站脚本)

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(跨站请求伪造)

CSRF攻击强制已认证用户向Web应用程序提交非预期请求。这些攻击利用了Web应用程序对用户浏览器的信任。

CSRF防护实现

防护技术描述
Anti-CSRF令牌为每个会话/表单生成唯一令牌,并在提交时验证
SameSite Cookie为Cookie设置SameSite=Strict或Lax属性
自定义标头要求X-Requested-With头(AJAX请求自动包含)
Referer验证根据允许域的白名单检查Referer头

来源:README.md:228

SQL 注入

SQL注入发生在将不可信数据作为命令或查询的一部分发送给解释器时,这允许攻击者执行非预期命令或访问未经授权的数据。

防范技术

技术描述示例
参数化查询使用带有绑定变量的预处理语句preparedStatement.setString(1, userInput)
ORM框架使用处理SQL转义的框架Hibernate, MyBatis
输入验证验证用户输入的类型、长度、格式使用正则表达式验证输入格式
最小权限限制数据库账户权限为查询操作创建只读账户
错误处理防止数据库错误详情泄露使用自定义错误页面/消息

来源:README.md:229

哈希DoS

哈希DoS(拒绝服务)攻击通过创建哈希冲突来利用可预测的哈希函数,这会显著降低基于哈希的数据结构的速度并导致资源耗尽。

Java实现保护

Java 7+包含哈希随机化,以防范哈希DoS攻击。在旧版本的Java中,务必通过-XX:+UseRandomizedHashCodes JVM标志确保其启用。

来源:README.md:230-231

脚本注入

脚本注入涉及通过未净化的输入(特别是可后续执行的文件上传)将恶意代码插入应用程序。

文件上传安全措施

措施描述
文件类型验证验证文件扩展名和MIME类型
内容验证检查文件内容是否与声明类型匹配
文件重命名删除或净化原始文件名
存储位置存储在Web根目录之外的位置或使用专用文件服务器
执行预防禁用上传目录的执行权限
杀毒扫描扫描上传文件以查找已知恶意软件

来源:README.md:232

CAPTCHA系统

CAPTCHA(完全自动化公共图灵测试,用于区分计算机和人类)系统区分人类用户和自动化机器人。

现代CAPTCHA风险分析因素

因素描述
响应时间过快可能表明自动化
鼠标移动自然模式与程序化模式
浏览器指纹已知机器人指纹
IP信誉可疑活动历史
用户行为页面导航模式

来源:README.md:233

网络安全

网络安全保护网络基础设施、连接以及通过网络传输的数据。

DDoS 防护

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、BlowfishRSA、DSA、ECC
典型用途批量数据加密密钥交换、数字签名

哈希算法比较

算法输出大小安全状态用途
MD5128位已破解,易受碰撞攻击不建议用于安全用途
SHA-1160位已弃用不建议用于安全用途
SHA-256256位目前安全推荐用于大多数应用
SHA-3可变高度安全推荐用于高安全需求
bcrypt/Argon2可变专为密码哈希设计密码存储

来源:README.md:237-240

用户隐私保护

用户隐私保护旨在保护个人身份信息(PII)免受未经授权的访问和滥用。

隐私保护最佳实践

  1. 密码保护

    • 使用强哈希算法(bcrypt, Argon2)存储密码
    • 添加动态盐值以防止彩虹表攻击
    • 绝不存储明文密码
  2. PII脱敏

    • 仅显示部分信息(例如,信用卡后4位)
    • 使用格式保留加密进行分析
    • 电话号码示例:“***-***-1234”
  3. 用户控制

    • 允许用户控制联系信息的可见性
    • 提供清晰的隐私设置
    • 实现数据导出/删除功能
  4. 数据收集原则

    • 仅收集必要数据(数据最小化)
    • 定义并遵守数据保留策略
    • 获得数据收集和处理的明确同意

来源: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 ConnectSAML
协议基于REST/JSON基于XML
复杂性更简单,轻量级更复杂
用例移动、Web应用企业、跨域SSO
令牌格式JWTXML断言
发现动态发现元数据交换

来源:README.md:248-251

服务器安全

服务器安全涉及保护服务器硬件、软件和数据免受威胁。

服务器强化策略

策略实现
最小化攻击面移除不必要的服务、应用程序和端口
定期更新为操作系统和应用程序实施补丁管理系统
安全配置遵循安全基准(CIS, NIST)
访问控制使用强认证,实施最小权限
文件系统安全设置适当权限,加密敏感数据
网络安全配置基于主机的防火墙,网络分段
监控与日志实施集中式日志记录,监控可疑活动

堡垒主机实现

来源:README.md:241-246

网络隔离

网络隔离将网络分段,以限制入侵的传播并减少攻击面。

关键实现技术

技术描述
DMZ互联网与私有网络之间的缓冲区
防火墙规则控制网络分段之间的流量
VLAN分段网络流量的逻辑分离
跳转服务器用于管理功能的强化访问点
网络访问控制控制设备对网络的访问

来源:README.md:244-246

结论

安全是后端架构的一个基础方面,需要采取纵深防御的方法。通过在Web应用程序、网络、数据存储系统和访问控制机制中实施分层安全措施,组织可以构建弹性系统,从而在保护系统免受不断演变的威胁的同时,保持功能性和性能。

持续警惕、定期安全评估以及及时了解新兴威胁和对策是长期保持强大安全态势的重要实践。