CIA 三要素在软件工程中的落地:从安全模型到研发实践

从 Confidentiality、Integrity、Availability 三个维度系统梳理 CIA 安全模型,并结合软件工程、Java 后端、SaaS
系统和研发流程给出可落地的设计、编码、测试与运维实践。

CIA 三要素在软件工程中的落地:从安全模型到研发实践

摘要

CIA 三要素是信息安全领域最经典的基础模型之一,分别代表:

  • Confidentiality,机密性:不该看的人看不到。
  • Integrity,完整性:不该改的人改不了,改了也能发现,业务状态和数据结果保持正确。
  • Availability,可用性:该用的时候系统能用,出故障后可以恢复。

在软件工程中,CIA 不应该只是安全团队 PPT 里的概念,而应该进入需求评审、架构设计、接口设计、数据库设计、编码规范、测试用例、发布流程、监控告警和应急响应。

换句话说,CIA 不是“最后加一层安全组件”,而是贯穿软件生命周期的质量属性。

如果用一句话概括:

机密性管谁能看,完整性管谁能改和改得对不对,可用性管系统能不能持续可靠地提供服务。


1. CIA 是什么?

CIA 是信息安全的三个核心目标:

1
2
3
C = Confidentiality  机密性
I = Integrity 完整性
A = Availability 可用性

NIST 对 CIA 的定义可以简化理解为:

  • 机密性:保护信息访问与披露限制,避免未授权主体获取信息。
  • 完整性:防止信息被不当修改或破坏,并保证真实性和不可抵赖性。
  • 可用性:确保被授权主体可以及时、可靠地访问和使用信息。

这三个目标共同构成软件系统安全设计的基础框架。

不过,在真实工程里,CIA 不能只停留在定义层面。更重要的问题是:

1
2
3
4
5
这个需求会不会泄露数据?
这个接口会不会被越权访问?
这个状态能不能被非法修改?
这个流程失败后能不能恢复?
这个系统依赖挂了会不会雪崩?

这些问题,才是 CIA 在软件工程里的真实落点。


2. 为什么软件工程需要 CIA?

很多系统做安全时,容易变成补丁式安全:

1
2
3
4
5
加一个 Spring Security
接口上加个 Token
密码做个加密
上线前扫一下漏洞
日志里偶尔脱敏一下

这类做法有用,但远远不够。

真正的软件工程视角应该是:

1
2
3
4
5
需求阶段:识别安全目标和业务风险
设计阶段:把 CIA 转成架构约束和业务规则
编码阶段:通过代码、配置、数据库约束实现控制
测试阶段:验证安全控制是否有效
上线阶段:通过监控、审计、备份、应急保证持续安全

OWASP ASVS 的价值也在这里:它不是只告诉你“要安全”,而是把 Web 应用安全拆成一组可验证、可测试、可落地的安全需求。

所以,CIA 的意义不是让系统“显得很安全”,而是帮助工程团队建立一套稳定的思考框架:

  • 哪些数据是敏感的?
  • 哪些操作必须授权?
  • 哪些状态不能被绕过?
  • 哪些流程必须可审计?
  • 哪些依赖失败后必须降级?
  • 哪些数据必须能恢复?

没有这些问题,安全就很容易变成“上线前贴符”。贴符可以求个心理安慰,但挡不住真实事故。


3. Confidentiality:机密性如何落地?

机密性的核心目标是:

不该看的人看不到,不该拿的数据拿不到。

在软件系统中,机密性主要体现在认证、授权、数据隔离、加密、脱敏、日志控制和密钥管理上。

3.1 身份认证:先确认“你是谁”

认证解决的是身份问题。

常见认证方式包括:

1
2
3
4
5
6
7
账号密码
短信/邮箱验证码
MFA / OTP
OAuth2 / OIDC
企业 SSO
设备绑定
风险登录检测

对于 Java 后端,常见实现包括:

1
2
3
4
5
Spring Security
OAuth2 Resource Server
OIDC Login
Session
JWT / Opaque Token

密码存储不能使用普通哈希,例如:

1
2
MD5(password)
SHA256(password)

这类算法太快,适合完整性校验,不适合密码存储。密码应该使用专门的密码哈希算法,例如:

1
2
3
Argon2id
bcrypt
PBKDF2

并且要配合随机 salt、合理的成本参数和升级机制。

3.2 授权:再确认“你能干什么”

认证只说明用户是谁,授权才说明用户能访问什么资源、执行什么操作。

常见授权模型包括:

模型 含义 适用场景
RBAC 基于角色的访问控制 后台管理系统、企业 SaaS
ABAC 基于属性的访问控制 多租户、复杂组织架构、动态规则
ACL 针对单个资源授权 文档系统、项目协作、网盘

接口层可以做权限控制:

1
2
3
4
5
@PreAuthorize("hasAuthority('finance:settlement:read')")
@GetMapping("/settlements/{id}")
public SettlementDetail getDetail(@PathVariable Long id) {
return settlementService.getDetail(id);
}

但只做接口权限是不够的。SaaS 系统尤其要重视数据权限。

例如:

1
2
3
4
5
6
7
8
9
10
public SettlementDetail getDetail(Long id) {
Settlement settlement = settlementRepository.findById(id)
.orElseThrow();

if (!Objects.equals(settlement.getTenantId(), CurrentUser.tenantId())) {
throw new AccessDeniedException("无权访问该租户数据");
}

return assembler.toDetail(settlement);
}

很多越权漏洞并不是没有登录,而是用户登录后通过修改 URL 参数访问了别人的数据:

1
2
/settlements/1001
/settlements/1002

如果后端只判断“用户是否登录”,而不判断“这个资源是否属于当前用户或当前租户”,机密性就被破坏了。

3.3 数据分级与脱敏

不同数据的敏感程度不同,不能一刀切。

常见数据分类:

等级 示例 处理方式
公开数据 商品介绍、公开公告 正常访问
内部数据 内部配置、运营数据 登录后访问
敏感数据 手机号、身份证号、银行卡号 脱敏、加密、审计
高敏数据 密码、Token、密钥、支付凭据 不展示、不打印、加密存储、严格授权

常见脱敏方式:

1
2
3
4
手机号:138****5678
身份证:110101********1234
银行卡:6222 **** **** 8888
邮箱:e***c@example.com

脱敏不是为了“好看”,而是为了减少泄露后的伤害面。

3.4 加密:传输、存储、字段级

加密可以分为三层:

1
2
3
传输中加密:HTTPS / TLS
存储中加密:数据库、磁盘、对象存储加密
字段级加密:身份证、银行卡、密钥、Token 等

生产系统的最低要求:

1
2
3
4
5
全站 HTTPS
数据库连接使用安全网络环境
对象存储私有读写
密钥不进 Git
敏感字段尽量字段级加密或脱敏存储

要注意:加密不是权限控制的替代品。

如果权限控制做烂了,加密也救不了。就像保险柜很结实,但钥匙贴在柜门上,攻击者还得谢谢你贴心。

3.5 Token 和 Session 的安全

如果系统使用 Bearer Token,需要意识到它的本质是:

谁持有 token,谁就能访问。

因此,access token 应该短生命周期,refresh token 应该可撤销、可轮换,不应该把长期 token 放在 localStorage 或 sessionStorage
中。

Web 系统更推荐:

1
2
HttpOnly + Secure + SameSite Cookie
或者 BFF 模式

Cookie 示例:

1
2
3
4
5
Set-Cookie: __Host-SESSION=<random>;
Secure;
HttpOnly;
SameSite=Lax;
Path=/

其中:

  • HttpOnly:降低 XSS 读取 Cookie 的风险。
  • Secure:只通过 HTTPS 传输。
  • SameSite:降低 CSRF 风险。
  • __Host- 前缀:减少子域 Cookie 覆盖风险。

3.6 日志脱敏

日志是机密性事故的重灾区。

不要打印:

1
2
3
4
5
6
7
8
9
10
password
Authorization header
access_token
refresh_token
Cookie
SessionId
验证码
身份证号
银行卡号
完整手机号

错误示例:

1
log.info("login request: {}", loginRequest);

如果 loginRequest 中包含密码,这条日志就直接泄露敏感信息。

更好的写法:

1
2
3
4
log.info("user login attempt, username={}, ip={}",
MaskUtils.maskUsername(username),
clientIp
);

4. Integrity:完整性如何落地?

完整性的核心目标是:

数据不能被未授权修改;数据被修改时必须符合业务规则;出了问题能够发现、追踪和恢复。

在财务系统、订单系统、权限系统、库存系统里,完整性往往比机密性还关键。数据泄露很严重,但金额算错、库存超扣、结算单重复生成,同样可能是灾难。

4.1 输入校验:所有外部输入都不可信

外部输入包括:

1
2
3
4
5
6
7
8
HTTP 参数
Header
Cookie
JWT Claims
Excel 导入
MQ 消息
第三方回调
管理员后台输入

需要校验:

1
2
3
4
5
6
7
8
格式
长度
范围
枚举
金额精度
业务状态
资源归属
操作权限

金额字段必须使用 BigDecimal,不要使用 doublefloat 做财务计算。

示例:

1
2
3
if (amount == null || amount.compareTo(BigDecimal.ZERO) < 0) {
throw new BizException("金额不能为负数");
}

但更重要的是业务完整性校验:

1
2
3
4
5
已结算单不能修改
已审核单不能删除
账期不能重叠
费用摊销总额必须等于原始费用
订单状态流转必须合法

这些规则不能只写在前端,必须在后端业务层或领域层兜底。

4.2 数据库约束:不要只相信应用代码

应用层校验很重要,但数据库也必须兜底。

常见数据库约束包括:

1
2
3
4
5
6
7
NOT NULL
UNIQUE
FOREIGN KEY
CHECK
VERSION
DELETED
CREATE_TIME / UPDATE_TIME

示例:

1
2
ALTER TABLE finance_bill
ADD CONSTRAINT uk_bill_no UNIQUE (tenant_id, bill_no);

金额字段:

1
2
amount
NUMERIC(18, 2) NOT NULL CHECK (amount >= 0)

数据库约束是最后一道门。应用代码是保安,数据库约束是门锁。保安可能打瞌睡,门锁不能没有。

4.3 事务一致性

涉及多表写入时,要明确事务边界。

示例:

1
2
3
4
5
6
7
@Transactional(rollbackFor = Exception.class)
public void createSettlement(CreateSettlementCommand command) {
// 1. 创建结算单主表
// 2. 创建结算明细
// 3. 冻结参与结算的数据
// 4. 写入审计日志
}

要避免:

1
2
3
主表写成功,明细写失败
状态改成功,审计日志没写
金额汇总成功,部分明细丢失

这类问题不是简单 bug,而是完整性破坏。

4.4 并发控制

并发是完整性的天然敌人。

常见问题:

1
2
3
4
5
6
重复提交
重复支付
库存超扣
余额扣成负数
结算单重复生成
审批状态被覆盖

常见手段:

1
2
3
4
5
6
7
唯一索引
乐观锁 version
悲观锁 select for update
状态机约束
幂等键 Idempotency-Key
分布式锁
消息去重

JPA 乐观锁示例:

1
2
@Version
private Long version;

幂等请求示例:

1
2
POST /payments
Idempotency-Key: 20260623-user123-xxx

服务端记录这个 key。用户重复提交或网络重试时,返回同一个结果,而不是执行两次扣款。

4.5 状态机与业务不变量

复杂业务系统一定要显式管理状态。

例如结算单状态:

1
2
3
4
5
DRAFT 草稿
SUBMITTED 已提交
APPROVED 已审核
SETTLED 已结算
CANCELLED 已取消

合法流转:

1
2
3
4
5
DRAFT -> SUBMITTED
SUBMITTED -> APPROVED
APPROVED -> SETTLED
DRAFT -> CANCELLED
SUBMITTED -> CANCELLED

非法流转必须拒绝:

1
2
3
SETTLED -> DRAFT
CANCELLED -> APPROVED
APPROVED -> DRAFT

代码中不要散落大量 if status == xxx,可以抽出状态机规则,让完整性约束更清晰。

4.6 审计日志

完整性不只是防止错误修改,还要能回答:

1
2
3
4
5
谁改的?
什么时候改的?
从什么值改成什么值?
为什么改?
从哪个 IP、设备、TraceId 发起?

审计日志建议记录:

1
2
3
4
5
6
7
8
9
10
operator_id
operator_name
operation
resource_type
resource_id
before_value
after_value
ip
trace_id
created_at

关键审计日志最好是 append-only,不允许普通业务代码修改或删除。

示例表结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE audit_log
(
id BIGINT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
operator_id BIGINT NOT NULL,
resource_type VARCHAR(64) NOT NULL,
resource_id VARCHAR(128) NOT NULL,
operation VARCHAR(64) NOT NULL,
before_json JSONB,
after_json JSONB,
trace_id VARCHAR(128),
created_at TIMESTAMP NOT NULL
);

4.7 代码与供应链完整性

完整性不仅包括业务数据,也包括代码、依赖、配置和制品。

要防止:

1
2
3
4
5
6
依赖被投毒
镜像被替换
构建产物被篡改
配置被误改
数据库 migration 被回改
生产环境被手工改坏

建议实践:

1
2
3
4
5
6
7
8
主分支保护
Code Review
CI/CD 权限控制
依赖漏洞扫描
制品仓库权限控制
Docker 镜像签名
生产配置只读化
Flyway migration 只新增不修改

尤其数据库迁移文件,一旦发布到环境,就不应该修改历史版本。正确方式是新增一个 migration 版本进行修正。


5. Availability:可用性如何落地?

可用性的核心目标是:

系统在需要的时候能正常提供服务,即使部分组件故障,也不要整体崩掉。

可用性不是“服务器不挂”这么简单,而是一整套架构、容量、限流、容灾、备份、恢复、监控、应急能力。

5.1 高可用架构

常见手段:

1
2
3
4
5
6
7
8
9
多实例部署
负载均衡
数据库主从或集群
Redis Sentinel / Cluster
MQ 集群
Kubernetes 自动重启
多可用区部署
CDN
对象存储

基本原则:

1
2
3
4
无状态服务水平扩展
有状态组件做复制和备份
关键链路避免单点
故障时允许局部降级

典型架构:

1
2
3
4
5
6
7
8
9
Browser

CDN / WAF

Nginx / API Gateway

多个 Spring Boot 实例

Database / Redis / MQ / Object Storage

5.2 限流、熔断、降级

可用性问题经常不是机器少,而是系统没有自我保护能力。

要防:

1
2
3
4
5
6
突发流量
恶意刷接口
慢 SQL 拖垮连接池
第三方接口超时
MQ 积压
线程池耗尽

常见控制:

1
2
3
4
5
6
7
Rate Limit 限流
Circuit Breaker 熔断
Timeout 超时
Retry with Backoff 重试退避
Bulkhead 舱壁隔离
Fallback 降级
Queue 队列削峰

Java 生态常见选择:

1
2
3
4
5
Resilience4j
Sentinel
Spring Cloud Gateway RateLimiter
线程池隔离
信号量隔离

重试要谨慎。无脑重试会把小故障打成雪崩,是典型的“帮倒忙界 MVP”。

5.3 超时控制

所有外部调用都必须有超时:

1
2
3
4
5
6
7
HTTP 调用
RPC 调用
数据库查询
Redis 调用
MQ 发送
文件上传
第三方支付/短信/物流接口

要明确:

1
2
3
4
5
连接超时
读取超时
总超时
重试次数
降级策略

错误设计:

1
restTemplate.getForObject(url, String.class);

更好的做法是配置合理的连接池、超时、重试和熔断策略。

5.4 备份与恢复

可用性不只是“不挂”,还包括“挂了能恢复”。

必须定义两个指标:

1
2
RPO:Recovery Point Objective,最多能丢多少数据
RTO:Recovery Time Objective,多久必须恢复服务

例如:

1
2
RPO = 5 分钟:最多丢 5 分钟数据
RTO = 30 分钟:30 分钟内恢复核心服务

建议实践:

1
2
3
4
5
6
7
数据库定期备份
binlog / WAL 归档
对象存储版本控制
配置备份
异地备份
恢复演练
灾难恢复预案

没有演练过的备份,不算真正可用。备份文件存在,只能证明“你备份过”;能不能恢复,是另一回事。

5.5 监控和告警

可用性必须可观测。

至少监控:

1
2
3
4
5
6
7
8
9
10
11
12
13
接口成功率
接口延迟 P95 / P99
错误率
数据库连接池
慢 SQL
CPU / Memory / Disk
GC
线程池
Redis 命中率
MQ 堆积
登录失败率
限流次数
外部依赖超时率

常见工具:

1
2
3
4
5
6
Prometheus
Grafana
Loki / ELK
OpenTelemetry
SkyWalking / Jaeger
Alertmanager

告警不应该只在“服务已经挂了”之后触发,还应该在“快挂了”时触发:

1
2
3
4
5
6
P99 延迟持续升高
错误率突然上升
线程池队列堆积
数据库连接池耗尽
磁盘空间低于阈值
MQ 消费延迟持续增加

6. CIA 在研发流程中的实践

CIA 最有价值的地方,是把安全问题提前到研发流程中。

6.1 需求阶段

每个需求都应该问三组问题。

机密性问题

1
2
3
4
5
6
这个功能涉及哪些敏感数据?
谁可以看?
是否需要脱敏?
是否需要导出限制?
是否需要水印?
是否涉及跨租户访问?

完整性问题

1
2
3
4
5
6
谁可以改?
什么状态下可以改?
是否需要审批?
是否允许撤销?
是否需要审计?
是否存在金额、库存、结算等强一致要求?

可用性问题

1
2
3
4
5
6
这个功能是否是核心链路?
峰值 QPS 大概多少?
失败后能否重试?
依赖第三方挂了怎么办?
是否需要异步化?
RTO/RPO 要求是多少?

6.2 设计阶段

设计文档建议固定加入一节:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
## Security & Reliability Considerations

### Confidentiality

- 数据分类:
- 访问控制:
- 脱敏策略:
- 加密策略:

### Integrity

- 业务不变量:
- 事务边界:
- 并发控制:
- 审计日志:

### Availability

- 超时/重试:
- 限流/熔断:
- 降级方案:
- 监控指标:
- 备份恢复:

这比上线前临时补安全靠谱得多。

6.3 编码阶段

团队可以形成一些默认规则:

1
2
3
4
5
6
7
8
所有接口默认需要认证
所有查询必须带租户或数据权限
所有写操作必须校验状态机
所有金额计算必须使用 BigDecimal
所有外部调用必须配置超时
所有关键写操作必须有审计日志
所有批量任务必须可重试、可幂等
所有异常日志不得泄露敏感信息

特别是多租户系统,租户隔离应该成为基础设施,而不是靠每个开发者“记得加 tenant_id”。

6.4 测试阶段

CIA 可以直接转成测试用例。

机密性测试

1
2
3
4
5
未登录访问接口,应返回 401
普通用户访问管理员接口,应返回 403
用户 A 访问用户 B 数据,应返回 403
导出数据时敏感字段应脱敏
日志中不应出现 token/password

完整性测试

1
2
3
4
5
重复提交不会生成两条记录
并发审批不会覆盖状态
金额合计和明细一致
非法状态流转被拒绝
修改关键数据会写审计日志

可用性测试

1
2
3
4
5
第三方接口超时时能降级
Redis 挂了核心功能是否可用
MQ 积压时系统是否保护自己
高并发登录是否触发限流
数据库慢查询是否触发告警

6.5 上线和运维阶段

上线后需要持续保障:

1
2
3
4
5
6
7
8
9
安全日志
审计日志
指标监控
异常告警
备份任务
恢复演练
漏洞扫描
依赖升级
应急预案

NIST SP 800-53 这类控制目录的价值在于,它不只看代码漏洞,还覆盖访问控制、审计、配置管理、事件响应、应急计划、供应链风险管理等组织级和系统级控制。


7. CIA 三者之间的取舍

CIA 不是三个目标全部无脑拉满。它们之间经常会冲突。

7.1 机密性 vs 可用性

MFA 可以提高机密性,但如果 MFA 服务挂了,用户可能无法登录。

解决方式:

1
2
3
4
备用验证方式
恢复码
管理员应急流程
MFA 服务高可用

7.2 完整性 vs 可用性

强一致事务可以保护完整性,但可能降低性能和可用性。

例如:

1
2
3
分布式事务
全局锁
强同步复制

这些都可能影响吞吐。

更合理的做法是分级:

1
2
3
核心资金链路:强一致
非核心统计链路:最终一致
报表分析链路:异步计算和定期校正

7.3 可用性 vs 机密性

缓存可以提高可用性,但缓存敏感数据会增加泄露风险。

解决方式:

1
2
3
4
5
缓存最小化
敏感字段不缓存
缓存设置过期时间
按租户隔离 key
Redis 网络隔离和认证

8. Java 后端 / SaaS 系统落地清单

8.1 机密性最低要求

1
2
3
4
5
6
7
8
9
全站 HTTPS
密码使用 Argon2id / bcrypt
Token 不进入日志
敏感字段脱敏
接口级权限控制
数据级权限控制
租户隔离
数据库账号最小权限
生产密钥不进 Git

8.2 完整性最低要求

1
2
3
4
5
6
7
8
9
核心表有唯一约束
金额字段精度明确
写接口有幂等设计
关键业务有事务
关键状态有状态机
并发写有锁或 version
重要操作有审计日志
Flyway migration 只新增不修改
CI/CD 有分支保护和 Code Review

8.3 可用性最低要求

1
2
3
4
5
6
7
8
9
10
服务多实例
数据库备份
Redis / MQ 高可用
外部调用有超时
核心接口有限流
慢 SQL 监控
错误率告警
P95 / P99 延迟监控
发布可回滚
定期恢复演练

9. 示例:结算单系统中的 CIA

以财务结算单系统为例,CIA 可以这样落地。

9.1 机密性

1
2
3
4
5
6
门店只能看自己的结算单
总部可以看全部
联营商只能看自己相关账单
导出 Excel 时手机号、身份证号脱敏
接口必须校验 tenantId
日志不能打印完整敏感结算数据

9.2 完整性

1
2
3
4
5
6
7
已结算单不能修改
已审核单不能删除
账期不能重叠
应收/应付金额必须和明细合计一致
重复点击生成结算单不能生成两份
摊销金额最后一期必须处理尾差
每次审核/反审核都写审计日志

9.3 可用性

1
2
3
4
5
6
7
8
大客户结算异步生成
导出任务走队列
查询接口强制分页
复杂报表走缓存或预计算
结算任务失败可重试
MQ 堆积有告警
数据库慢 SQL 有告警
生成失败可以回滚或补偿

这样看,CIA 就不是抽象概念,而是能直接指导需求、设计、编码和测试。


10. 团队可直接使用的 CIA Checklist

下面这个 checklist 可以放到需求评审、技术方案或 Pull Request 模板里。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# CIA Checklist

## Confidentiality 机密性

- [ ] 是否涉及敏感数据?
- [ ] 谁可以访问这些数据?
- [ ] 是否需要接口权限控制?
- [ ] 是否需要数据权限控制?
- [ ] 是否涉及多租户隔离?
- [ ] 是否需要脱敏展示?
- [ ] 是否需要加密存储?
- [ ] 日志是否可能泄露敏感信息?

## Integrity 完整性

- [ ] 是否存在关键业务不变量?
- [ ] 是否需要数据库唯一约束或 CHECK 约束?
- [ ] 是否需要事务?
- [ ] 是否存在并发写?
- [ ] 是否需要幂等?
- [ ] 是否需要状态机约束?
- [ ] 是否需要审计日志?
- [ ] 是否需要数据修复或补偿机制?

## Availability 可用性

- [ ] 是否属于核心链路?
- [ ] 是否存在外部依赖?
- [ ] 是否设置超时?
- [ ] 是否需要重试退避?
- [ ] 是否需要限流?
- [ ] 是否需要熔断或降级?
- [ ] 是否需要异步化或队列削峰?
- [ ] 是否配置监控和告警?
- [ ] 是否有备份和恢复方案?

11. 总结

CIA 三要素在软件工程中的价值,不是提供一个安全口号,而是提供一套系统性的设计框架。

1
2
3
Confidentiality:权限、加密、脱敏、隔离,防止不该看的看到。
Integrity:校验、事务、约束、审计、幂等,防止不该改的改了,防止改错。
Availability:高可用、限流、熔断、备份、监控,保证该用时能用。

对于软件团队来说,最实用的做法是:

1
2
3
4
5
需求评审时问 CIA
技术设计里写 CIA
编码规范里落实 CIA
测试用例里验证 CIA
上线运维中持续监控 CIA

安全不是一个最后才加上的模块,而是一种系统质量。

系统设计如果不考虑 CIA,就像盖楼只看装修图,不看地基、承重和消防。短期看起来能住,长期就全靠玄学。软件工程不该靠玄学,尤其是生产系统。


参考资料

  1. NIST CSRC Glossary: Confidentiality, Integrity, Availability
    https://csrc.nist.gov/glossary/term/confidentiality_integrity_availability

  2. NIST NCCoE SP 1800-26: Data Confidentiality — Executive Summary
    https://www.nccoe.nist.gov/publication/1800-26/VolA/index.html

  3. NIST SP 800-53 Rev. 5: Security and Privacy Controls for Information Systems and Organizations
    https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final

  4. OWASP Application Security Verification Standard, ASVS
    https://owasp.org/www-project-application-security-verification-standard/

  5. OWASP Session Management Cheat Sheet
    https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html

  6. OWASP Top 10 Web Application Security Risks
    https://owasp.org/www-project-top-ten/


CIA 三要素在软件工程中的落地:从安全模型到研发实践
https://allendericdalexander.github.io/2026/06/23/archtect/summary/cia-triad-software-engineering-blog/
作者
AtLuoFu
发布于
2026年6月23日
许可协议