D06 · 安全架构 · 2021 试题二

系统安全架构设计及其应用

鉴别框架 + 访问控制框架 + 主要威胁与危害,落到 Go 中间件与 PostgreSQL 的可自证形态

会考什么

真题原文与权重

2021 年「系统架构设计师」论文,试题二原文如下(逐字引用):

2021 论文 · 试题二(逐字) 试题二:论系统安全架构设计及其应用 请围绕"论系统安全架构设计及其应用"论题,依次从以下三个方面进行论述。 1. 概要叙述你所参与管理或开发的软件项目,以及你在其中所承担的主要工作。 2. 详细论述安全架构设计中鉴别框架和访问控制框架设计的内容,并论述鉴别和访问控制所面临的主要威胁,并说明其危害。 3. 阐述你在软件开发的过程中都遇到了哪些实际问题及解决方法。
频次与权重。9 年 36 题里,「安全」只出现过 1 次(2021 试题二), 归为 D6,属最低权重档。真正的优先级依据见 docs/真题分析.md:架构风格每年必有、数据 7 次、测试 5 次且连续 3 次、 性能/高并发连续 3 次最热;安全与云边一样被归为「降权主题」。

但仍要准备,理由是成本低、问法固定:安全题几乎只有这一种标准结构—— 鉴别框架 + 访问控制框架 + 威胁与危害 + 实际问题。把这一篇备熟,考到就是原题。 若考试把它换成「零信任」「数据安全」,同一套素材能直接复用。
一句话讲清

TL;DR

一句话:安全架构就两件事——鉴别回答"你是谁"(口令加盐哈希、JWT、双因素), 访问控制回答"你能做什么"(RBAC 落 PG、行级归属过滤、参数化 SQL); 两者面对的威胁与危害逐一对应,再补上最小权限与审计。
机制讲解

两道闸门与它们各自的敌人

把安全架构拆成一条请求链路就很好记:请求进来先过鉴别闸门(你是谁), 再过鉴权闸门(你能干什么),最后到数据层(你只能碰哪些行)。 每一层都对应一类攻击,缺任何一层,那一类攻击就长驱直入。

威胁攻击的是什么对应防护本平台做法
暴力破解鉴别限流 + 第二因子登录失败按账号与地址双维度限流锁定
凭证泄露鉴别加盐哈希bcrypt 加盐哈希后落 PostgreSQL
重放 / 会话劫持鉴别令牌时效与吊销JWT 校验签名与有效期,令牌唯一编号可吊销
水平越权访问控制行级归属过滤查询强制附带 owner 条件
垂直越权 / 权限提升访问控制RBAC 鉴权角色-权限三层模型落 PG,默认拒绝
SQL 注入数据层参数化查询pgx 参数化,禁止字符串拼接

下面的模拟器让你亲手开关每一层防护,看哪一类攻击会被突破。 默认是按「一个只校验登录、其余防护没上」的半成品配置——这是最容易踩的状态。

防护开关 × 攻击场景

拨动开关,看右表哪些攻击被拦下、哪些长驱直入。

攻击拦截 0 / 6拦截率
已拦截
0
被突破
0
正常请求
放行
场景判定说明
按默认半成品配置:仅部分防护生效。
不这么做会怎样。「只留已登录」是最典型的错误安全架构:它把鉴别简化成一张门票, 进门之后就再无约束。于是会员改个编号就能读走他人电子存证(水平越权), 登录框里一句注入就能绕过鉴别(SQL 注入),系统里任何接口对任何人敞开(垂直越权)。 鉴别只管一瞬间,访问控制要管每一次。
这个模拟器的判定规则代码

规则极简,但每条都对应真实机制:每个攻击场景声明它依赖哪几层防护, 全部命中才算拦下;缺一层就算突破,并告诉你缺的是哪一层。

// 攻击场景声明依赖:缺任何一项即被突破
拦下 = 该场景所需防护 全部开启

// 唯一例外:暴力破解在「限流」缺失时,可由「二次鉴别」兜底
if (缺限流 且 二次鉴别开) 拦下 = true

// 正常请求永远放行 —— 防护不能把合法业务一起挡掉
if (场景.正常) 判定 = 放行

注意:这是教学模拟,不是实测。开关状态与判定都是机制演示, 本页不产出任何可写进论文的技术指标。

落到我们平台

映射到 fazi 平台与取舍

fazi 协会数字平台有五个模块,安全的敏感面不同,我对它们的处置也不同:

fazi 模块安全侧重落地形态
电子存证鉴别强度最高口令 + 动态口令双因素;写入不可篡改,操作全审计
法律智能咨询数据归属与隔离会员只能检索到自己的咨询记录;行级归属过滤
社交系统越权与注入RBAC 管删改权限;全部 SQL 参数化
培训报名防刷与防重复登录鉴权 + 行级校验(只能改自己的报名)
信息发布权限最小化编辑与发布分离,普通会员只读

取舍。云托管容器服务本身不提供应用层的鉴别与鉴权, 而商业安全设备(WAF、堡垒机这类)会引入额外成本与运维负担,与「一人全栈」的约束冲突。 所以我把安全能力全部做在能自证的形态里:Go 中间件统一鉴别与鉴权、JWT、 RBAC 落 PostgreSQL、行级权限、审计表、pgx 参数化 SQL、传输用 HTTPS、敏感字段密文落库、 密钥走环境变量。代价是没有现成的规则库与流量清洗,收益是每一层都能讲清原理、 也能被自动化用例验证,这正是答辩时经得起追问的关键。

完整论文

六段全文

摘要 (300–330 纯汉字)
2025年3月,我作为河南省法律咨询协会唯一的全栈架构师,主导建设了协会数字平台。该项目面向协会500名常用会员及未来3000名潜在用户,涵盖信息发布、社交系统、电子存证、培训报名、法律智能咨询五大模块。我在项目中承担需求分析、架构设计、编码实现、部署运维的全部技术职责。本文以该项目为例,讨论了系统安全架构设计在实际项目中的应用。文章首先介绍项目背景和系统安全架构设计的基本概念,然后详细阐述我们在架构设计、技术选型、问题解决等方面的具体实践,最后总结项目经验和不足。通过系统安全架构设计的有效应用,平台于2026年6月上线,法律问答Recall@20达0.92,P95响应380毫秒,缓存命中率92%,可用性99.95%,MTTR从45分钟降至8分钟。实践表明,在协会资源支持下,一人全栈架构师借助云托管服务和AI辅助开发,可以交付生产级法律数字化平台。
一、项目背景 (逐字抄 essay-common.md)
河南省法律咨询协会成立于2004年,现有理事119名、法学专家62名、律师团成员78名、讲师团成员69名,承担法制宣传、法律培训、法律咨询、调解仲裁等职能。协会原有官网仅能发布新闻,会员管理、法律咨询、电子存证依赖线下和微信群,数据分散、效率低下。协会服务对象中有大量基层群众和中小微企业,法律术语看不懂、流程搞不清、律师咨询门槛高,维权成本居高不下。
2025年3月,协会理事会决定建设数字平台,并给予充分资源支持。我作为协会唯一的全栈架构师,承担从需求分析、架构设计、编码实现到部署运维的全部技术职责。平台以"fazi协会数字平台"为中心,涵盖信息发布、社交系统、电子存证、培训报名、法律智能咨询五大模块。前端采用 Nuxt 4 SSR + Vue 3.5 + Tailwind 4,后端采用 Go 1.26 + Gin + pgx 手写 SQL,数据库 PostgreSQL 18,部署在云托管容器服务上。平台常用用户500人,未来半年潜在用户3000人,峰值QPS约800。
技术选型上,我基于"一人全栈、生产级标准"原则做了三个关键决策:一是采用云托管服务替代自建中间件,把运维精力留给业务;二是以 PostgreSQL 18 + pgvector 作为统一数据平台,同时承载关系数据、向量检索、JSONB 文档和全文检索;三是引入 Claude Code / Vibe Coding 辅助开发,提升一人开发效率。协会在法律知识库、律师资源、经费预算上给予全力支持,使我能够专注于架构决策和业务实现。
二、理论概述 (安全架构的理论骨架)
安全架构设计的核心,是把身份可信、权限可控、行为可溯贯穿系统全生命周期,其两大基础支柱是鉴别框架与访问控制框架。鉴别框架解决你是谁的问题,通过口令、令牌、生物特征及其组合来验证用户身份的真实性,常见方式有多因素鉴别,常见协议有 Kerberos、OAuth 2.0 与 OIDC 等。访问控制框架解决你能做什么的问题,主流模型包括自主访问控制、强制访问控制、基于角色的访问控制与基于属性的访问控制。两者面对的威胁差异明显:鉴别环节主要面临暴力破解、钓鱼攻击、重放攻击、中间人攻击与凭证泄露;访问控制环节主要面临权限提升、越权访问、会话劫持与跨站请求伪造。这些威胁一旦得逞,轻则数据泄露、非法操作,重则业务中断、触发合规风险。据此我确立了四条设计原则:默认拒绝、最小权限、纵深防御、职责分离。安全不是某一个模块的功能,而是贯穿每一层请求的约束,任何绕过鉴别与鉴权的捷径都必须被架构本身堵死。
三、实践一:鉴别框架设计 (对应题干第 2 问)
平台的鉴别框架我设计为统一的 Go 中间件,所有请求先过这一层,未通过鉴别的一律被拒绝,业务代码不感知鉴别逻辑。会员登录采用口令鉴别,密码不以明文或简单散列存储,而是用 bcrypt 加盐哈希后落 PostgreSQL,同一密码每次生成的散列都不同,即使数据库泄露也难以批量还原。登录成功后签发 JWT,访问令牌有效期设为两小时,刷新令牌七天,令牌携带用户标识、角色与唯一编号,签发与吊销记录落在会话表,管理员可主动失效。对电子存证、法律咨询等敏感模块,我叠加短信动态口令构成多因素鉴别,口令泄露时攻击者仍缺少第二因子。为抵御暴力破解与撞库,登录接口按账号与来源地址双维度限流,连续失败达阈值即短时锁定并要求动态口令。令牌校验同时验证签名与有效期,并核对唯一编号是否已被吊销,重放旧令牌会被拒绝。鉴别失败与异常登录全部写入审计表,用于事后追溯与告警。
四、实践二:访问控制框架设计 (对应题干第 2 问)
访问控制我采用以 RBAC 为主、行级权限为辅、按属性动态兜底的组合。权限模型落在 PostgreSQL 三张表:用户、角色、权限,通过用户角色与角色权限两张关联表解耦,角色分为普通会员、理事、管理员等,权限粒度到接口与数据操作。请求经过鉴别后进入鉴权中间件,先按路由所需权限比对当前角色,通过后再进入数据层;数据层所有查询强制附带归属条件,普通会员只能读到属于自己的存证、咨询与报名记录,从源头阻断水平越权。对少数无法用静态角色表达的场景,例如理事仅在协会活动期间可查看某类数据,我用基于属性的判断补一层,按身份属性、数据敏感度与时间条件实时裁决,但严格控制其使用范围以免规则膨胀。为避免越权与注入,我要求所有 SQL 由 pgx 参数化传入,禁止字符串拼接;同时坚持默认拒绝,未显式授权的接口一律不可访问,权限变更只增不删地记入审计,做到最小权限可核查。
五、实践三:实际问题及解决方法 (对应题干第 3 问)
实施过程中我遇到四类实际问题。一是水平越权,早期接口只校验已登录而不校验数据归属,会员改一下地址里的编号就能读到他人存证,我把鉴权统一收敛到中间件,并在数据访问层强制加入归属条件,配合自动化越权用例把这条路径锁死。二是注入风险,开发初期存在拼接 SQL 的写法,我全面改为 pgx 参数化查询,并加入 SQL 审计复查。三是暴力破解与凭证泄露,我提高密码复杂度下限,改用加盐哈希存储,对敏感操作强制动态口令,登录失败限流上线后撞库尝试被有效压制。四是传输与存储安全,全站强制 HTTPS,身份证号、手机号等敏感字段在数据库内加密存放,密钥通过环境变量注入,绝不进入代码仓库。此外我建立统一审计表,记录操作人、操作对象、时间与结果,既满足合规要求,也为事后追责提供依据。这些改造都没有引入额外的商业安全组件,全部依托现有 Go 中间件、PostgreSQL 与云托管能力完成。
六、总结展望 (定稿 + 换主题展望句)
本项目让我深刻体会到,在资源受限、单人全栈的现实约束下,架构决策的核心不是"用什么最先进的技术",而是"在约束下做什么取舍"。通过云托管服务、PostgreSQL 统一数据平台和 AI 辅助开发,我把有限的精力集中在业务架构和核心模块上,交付了生产级平台。
不足与改进:一是自动化测试覆盖率不足 60%,回归测试依赖手工,计划引入 AI 辅助测试生成;二是告警体系仍依赖规则阈值,计划引入 AIOps 做智能降噪和根因分析;三是部分业务模块仍为单体,计划按 DDD 限界上下文逐步拆分。
安全不是一次性交付,而是持续对抗的过程,未来我计划把鉴别与访问控制沉淀为平台统一的安全能力,并逐步引入零信任思路,对每一次请求重新校验身份与权限。未来,我将继续完善平台建设,为协会会员和基层群众提供更低门槛、更高质量的法律服务。
逐段拆解

每段讲什么 · 多少字

段讲什么字数(纯汉字)
摘要模板填空:项目 + 主题 + 效果数据310
一、项目背景协会现状、平台五大模块、技术栈、三个关键决策459(定稿)
二、理论概述鉴别框架与访问控制框架、两类威胁、四条原则356
三、实践一鉴别框架:中间件、加盐哈希、JWT、多因素、防爆破329
四、实践二访问控制:RBAC 落 PG、行级过滤、ABAC 兜底、参数化332
五、实践三四类实际问题与解决方法,全部可自证331
六、总结展望定稿取舍感悟 + 不足 + 主题展望299
正文合计P1–P62106
答题要点

✅ 加分 / ❌ 扣分

题干三问与本文段落的对应关系,是这篇最容易得分也最容易漏的地方:

题干要求对应本文
第 1 问简述项目与你的工作第一段(项目背景)
第 2 问论述鉴别框架与访问控制框架设计,及其威胁与危害第二段(理论)+ 第三段(鉴别)+ 第四段(访问控制)
第 3 问实际问题及解决方法第五段(实践三)
✅ 加分
• 明确写出鉴别(你是谁)与访问控制(你能做什么)的分工,这是阅卷的采分锚点
• 威胁与危害成对出现:暴力破解→账号接管、越权→数据泄露、注入→拖库
• 访问控制能说出 RBAC 三层模型(用户-角色-权限)并落到表结构
• 每条威胁都有对应防护,形成"威胁—防护"闭环
• 落到真实技术栈(Go 中间件 / JWT / PostgreSQL / pgx),细节可追问
• 坚持最小权限、默认拒绝、纵深防御等原则并点明
❌ 扣分
• 只写鉴别不写访问控制,或反之——第 2 问要求两者都论述
• 只列威胁不说危害,或只讲理论没有项目实例(空谈套话)
• 写商业安全设备(WAF、堡垒机)却不属于本平台技术栈,一问细节就露馅
• 第 3 问写成"没遇到问题",等于放弃一段分数
• 违反技术栈红线:出现缓存中间件、消息队列、容器编排等平台没有的组件
• 摘要与正文数据不一致,或正文合计字数不足 2000
背诵清单

考前 8 句

背下来就能成段 1. 安全架构两大支柱:鉴别回答你是谁,访问控制回答你能做什么。 2. 鉴别方式:口令、令牌、生物特征、多因素;协议:Kerberos、OAuth 2.0/OIDC。 3. 访问控制四模型:自主、强制、基于角色、基于属性。 4. 鉴别威胁:暴力破解、钓鱼、重放、中间人、凭证泄露。 5. 访问控制威胁:权限提升、越权访问、会话劫持、跨站请求伪造。 6. 危害:数据泄露、非法操作、业务中断、合规风险。 7. 我的做法:Go 中间件统一鉴别鉴权、bcrypt 加盐哈希、JWT 带吊销、RBAC 落 PG、行级归属过滤、pgx 参数化、审计表。 8. 原则落地:默认拒绝、最小权限、纵深防御、职责分离。
数据来源

数字从哪来

数字来源说明
可用性 99.95%固化取值运营指标,无法自证的量,全页与摘要一致
MTTR 45→8 分钟固化取值运营指标,固化取值
Recall@20 0.92 / P95 380ms / 缓存命中率 92%固化取值(本项目)摘要承诺的效果值,安全篇不引用为论据
鉴别与访问控制的机制描述无实验数据本篇为机制与架构论述,不含任何未实测的技术指标
本主题没有可引用的实验场数据,因此论文里只写机制、不写具体性能数字, 避免被追问时答不上。凡出现 99.95%、45→8 分钟这类量,均为固化取值, 属成文口径而非实测结果。