目录
“安全修复”是指为了消除系统中的安全漏洞、越权风险、数据泄露风险或恶意攻击风险而进行的发布或变更。
它不一定是普通功能故障。系统可能看起来还能正常使用,但已经存在被利用的风险。
一、常见安全修复场景
场景一:用户越权查看其他人的数据
例如,系统查看订单详情的接口是:
/order/detail?id=10001
普通用户登录后,把地址中的 id=10001 改成 id=10002,竟然可以看到其他部门或其他客户的订单。
问题原因可能是:
- 系统只判断用户是否登录;
- 没有判断该用户是否有权查看这条订单;
- 后端直接按照订单编号返回数据。
修复内容:
增加订单数据权限校验; 只能查看本人、所属部门或已授权范围内的订单; 无权限访问时返回403。
表单可填写:
发布类型:安全修复 发布级别:紧急发布 发布主题:订单详情接口越权访问漏洞修复 业务影响:普通用户可能查看非授权订单数据
这类问题通常风险较高,因为可能造成敏感数据泄露。
场景二:未登录用户可以访问后台接口
例如,系统某个导出接口:
/api/export/customer
没有校验登录状态,任何人只要知道接口地址,就可以导出客户资料。
修复内容:
- 增加身份认证;
- 增加接口权限控制;
- 限制只有指定角色可以导出;
- 记录导出操作日志。
表单示例:
发布类型:安全修复 发布级别:紧急发布 发布主题:客户资料导出接口未授权访问修复 风险说明:未登录用户可能获取客户数据 回退方案:恢复旧版本并临时关闭该接口
场景三:弱口令或默认密码风险
例如,系统新增账号时默认密码为:
123456
而且系统没有要求首次登录修改密码,也没有密码复杂度要求。
修复内容:
- 默认生成随机密码;
- 首次登录必须修改密码;
- 密码长度至少8位;
- 必须包含字母、数字或特殊字符;
- 连续输错多次后锁定账号。
这种场景也属于安全修复。
发布主题:系统账号密码安全策略加固 发布类型:安全修复 发布级别:常规发布
如果已经发现账号被盗用,则应升级为紧急发布。
场景四:SQL注入漏洞
例如,系统登录接口直接拼接SQL:
SELECT * FROM users WHERE username = '$username' AND password = '$password';
攻击者输入特殊字符后,可能绕过登录或读取数据库内容。
修复内容:
- 改用参数化查询;
- 禁止直接拼接SQL;
- 增加输入校验;
- 限制数据库账号权限;
- 检查相关日志。
表单示例:
发布类型:安全修复 发布级别:紧急发布 发布主题:登录接口SQL注入漏洞修复 风险说明:攻击者可能绕过登录或读取数据库数据 验证内容:正常登录、错误密码、特殊字符输入、注入测试
这类漏洞通常应视为高风险安全修复。
场景五:文件上传漏洞
例如,系统允许用户上传附件,但没有限制文件类型,攻击者可以上传:
shell.php
如果服务器把它当作程序执行,攻击者可能直接控制服务器。
修复内容:
- 只允许上传白名单文件类型;
- 校验真实文件格式;
- 上传后重命名;
- 文件保存到非Web执行目录;
- 限制文件大小;
- 禁止脚本文件执行。
表单可填写:
发布主题:附件上传安全漏洞修复 发布类型:安全修复 发布级别:紧急发布 影响范围:工单附件上传、用户头像上传
场景六:敏感信息直接显示或写入日志
例如,系统日志中出现:
username=zhangsan password=123456 token=eyJhbGciOi...
或者接口返回完整的身份证号、手机号、银行卡号。
修复内容:
- 密码禁止写入日志;
- Token只显示部分字符;
- 手机号、身份证号脱敏;
- 限制日志访问权限;
- 清理历史敏感日志。
示例:
发布主题:系统日志敏感信息泄露修复 发布类型:安全修复 发布级别:常规发布
如果日志已经可以被非授权人员访问,则可能要按紧急发布处理。
场景七:登录接口没有防暴力破解
例如,攻击者可以不停尝试用户名和密码:
admin / 123456 admin / password admin / admin123
系统既不锁定账号,也不限制请求频率。
修复内容:
- 连续失败5次锁定账号;
- 增加验证码;
- 限制同一IP请求频率;
- 记录异常登录;
- 增加登录告警。
表单示例:
发布主题:登录接口防暴力破解功能加固 发布类型:安全修复 发布级别:常规发布
如果已经出现大量撞库攻击,可以改为紧急发布。
场景八:会话或Token长期不过期
例如,用户离职后,之前登录生成的Token仍然可以使用几个月。
或者用户修改密码后,旧Token仍然有效。
修复内容:
- 设置Token有效期;
- 修改密码后使旧Token失效;
- 用户停用后立即注销所有会话;
- 支持管理员强制下线;
- 增加异常会话检测。
发布主题:用户会话失效机制安全修复 发布类型:安全修复 发布级别:常规发布
如果离职账号仍然可以访问生产系统,则应紧急处理。
场景九:跨站脚本攻击,也就是XSS
例如,用户在备注中输入:
<script>alert('xss')</script>
其他用户打开订单页面时,脚本会被执行。
严重时可能导致:
- 登录凭证被窃取;
- 页面内容被篡改;
- 用户被跳转到恶意网站。
修复内容:
- 对用户输入进行过滤;
- 输出时进行HTML转义;
- 增加内容安全策略;
- 禁止危险脚本执行。
表单示例:
发布主题:订单备注存储型XSS漏洞修复 发布类型:安全修复 发布级别:紧急发布
场景十:第三方组件存在已知高危漏洞
例如,系统使用的组件被披露存在严重安全漏洞:
Spring Framework Log4j OpenSSL Nginx Tomcat 某个npm依赖 某个Rust crate
即使系统目前没有明显故障,也可能需要升级组件版本。
修复内容:
- 升级依赖版本;
- 替换存在漏洞的组件;
- 调整配置以关闭危险功能;
- 重新进行兼容性测试。
表单可填写:
发布主题:第三方组件高危漏洞版本升级 发布类型:安全修复 发布级别:紧急发布 风险说明:当前组件版本存在已公开的远程代码执行风险
是否紧急,取决于漏洞严重程度、系统是否暴露到外网以及是否已有攻击利用。
场景十一:权限配置过大
例如,普通客服账号被错误赋予了:
用户删除 角色管理 系统配置 批量导出 数据库维护
修复内容:
- 收回过大权限;
- 按最小权限原则重新配置;
- 区分查看、编辑、删除和审批权限;
- 增加权限变更审计日志。
这类可能不是代码发布,也可以作为安全变更处理:
发布类型:安全修复 具体变更类型:权限配置变更 发布级别:常规发布
如果已经确认普通用户可以执行危险操作,则应紧急修复。
场景十二:防火墙或网络端口暴露
例如,数据库端口:
3306
对整个公司网络甚至互联网开放。
或者Redis端口:
6379
没有密码并且可以被外部访问。
修复内容:
- 限制来源IP;
- 关闭不必要端口;
- 增加访问控制;
- 配置密码或证书;
- 通过堡垒机访问;
- 增加网络日志和告警。
表单示例:
发布主题:数据库端口访问范围安全加固 发布类型:安全修复 发布级别:紧急发布 影响范围:数据库访问策略、防火墙规则
二、安全修复与普通Bug修复的区别
| 对比项 | Bug修复 | 安全修复 |
|---|---|---|
| 主要目标 | 恢复功能正确性 | 消除攻击、越权或数据泄露风险 |
| 系统是否可能仍然正常 | 可能 | 经常仍然正常 |
| 是否有攻击风险 | 不一定 | 通常有 |
| 是否涉及敏感数据 | 不一定 | 经常涉及 |
| 是否需要保密 | 通常不需要 | 部分漏洞信息需要限制传播 |
| 是否需要安全验证 | 不一定 | 通常需要 |
| 是否需要检查历史日志 | 通常不需要 | 可能需要判断是否已被利用 |
例如:
订单金额显示错误
通常属于 Bug 修复。
而:
普通用户能够修改其他客户的订单金额
则属于安全修复。
三、安全修复不一定都是紧急发布
建议仍然分成两个字段:
发布类型:安全修复 发布级别:常规发布 / 紧急发布
可以按常规发布处理的情况
- 密码复杂度策略优化;
- 日志脱敏完善;
- 增加登录验证码;
- 权限模型进一步细化;
- 组件存在低危漏洞;
- 内网非核心系统安全加固;
- 当前已有有效防护或临时规避措施。
应按紧急发布处理的情况
- 已发现越权访问;
- 敏感数据可能泄露;
- 存在SQL注入;
- 存在远程代码执行漏洞;
- 未授权用户可以访问系统;
- 文件上传可执行恶意脚本;
- 核心账号或密码已经泄露;
- 系统正在遭受攻击;
- 第三方组件出现可被直接利用的高危漏洞;
- 数据库、Redis等端口直接暴露。
四、你们表单中的安全修复示例
系统/服务名称:DIC业务系统 发布类型:安全修复 发布级别:紧急发布 发布版本号:V1.1.7 发布主题:订单详情接口越权访问漏洞修复 发布内容说明: 1. 增加订单所属部门权限校验; 2. 普通用户只能查看本人及所属部门订单; 3. 无权限访问时返回403; 4. 增加越权访问审计日志。 安全风险说明: 普通用户修改订单编号后,可能查看其他部门订单详情。 影响范围: 订单查询、订单详情、订单导出接口。 测试内容: 1. 本人订单访问; 2. 同部门订单访问; 3. 跨部门订单访问; 4. 管理员访问; 5. 无权限访问日志验证。 回退方案: 恢复V1.1.6程序包,并临时关闭订单详情接口。 上线验证人: 测试负责人、系统负责人、业务负责人。
你们的“发布类型”中保留“安全修复”是合理的,主要用于标记本次发布是为了处理安全风险,而“是否紧急”再通过“发布级别”单独判断。