如何做好Code Review——附十大中高风险安全漏洞排查指南

目录

一、为什么Code Review必须关注安全?

二、十大中高风险安全漏洞排查清单

🔴 高危篇(直接威胁系统与数据安全)

1. SQL注入 / 命令注入(高危)

2. 越权访问(高危)

3. 硬编码凭证与敏感信息泄露(高危)

4. 跨站脚本(XSS)(高危)

5. 不安全的反序列化(高危)

🟡 中危篇(特定条件可触发安全隐患)

6. 跨站请求伪造(CSRF)(中危)

8. 使用不安全的加密算法或弱密码学(中危)

9. 不安全的日志记录与信息泄露(中危)

10. 依赖库已知漏洞(中危)

三、如何高效开展安全Code Review

1. 建立标准化安全审查清单

2. 自动化工具先行,降低人工成本

3. 人工审查聚焦高风险核心模块

4. 统一团队安全编码规范

四、总结


安全Code Review:十大中高风险漏洞排查与落地方法

一、为什么Code Review必须关注安全?

Code Review是软件开发中通过同行审查发现潜在问题、提升代码质量的关键实践,核心价值集中在三大维度:

1.质量保障:可提前发现30%-50%的逻辑错误与安全漏洞;

2.知识共享:统一团队技术认知,带动整体技术能力均衡提升;

3.规范落地:严格落地统一的编码标准与架构设计原则。

但多数团队的Code Review存在明显短板,仅聚焦代码格式、逻辑BUG,完全忽视潜在安全风险。相关数据显示,82%的P0线上故障,均源于代码合入主分支前未发现的低级安全与逻辑问题

从成本角度来看,代码合并前修复安全漏洞的成本,比上线后漏洞暴露、整改的成本低10倍以上。安全审查从来不是Code Review的可选项,而是必备必修课。

下文将梳理软件开发中最常见的10类中高危安全漏洞,同时配套可直接落地的排查方法、危险示例及修复方案,并提供高效的安全Code Review落地流程。

风险等级说明:高危漏洞可直接导致系统入侵、数据泄露、服务瘫痪;中危漏洞需特定条件触发,可造成较大安全隐患,威胁业务与数据安全。

二、十大中高风险安全漏洞排查清单

🔴 高危篇(直接威胁系统与数据安全)

1. SQL注入 / 命令注入(高危)

漏洞定义:直接将用户输入拼接至SQL查询语句、系统执行命令中,攻击者可通过构造恶意输入,篡改查询逻辑、执行任意系统命令,窃取、篡改甚至删除数据库数据,控制服务器。

Code Review排查要点

  • 全局检索代码中通过字符串拼接(+、concat、format)构建SQL语句、系统命令的场景;

  • 核查所有用户输入参数,是否完成严格的校验、过滤与转义处理;

  • 重点警惕动态表名、动态列名等无法使用参数化查询的特殊场景,排查是否存在兜底防护方案。

危险代码示例

// 高危:直接拼接用户输入,存在SQL注入漏洞 String sql = "SELECT * FROM users WHERE username = '" + username + "'";

修复建议:统一使用参数化查询、预编译SQL语句;系统命令执行禁止拼接用户输入,采用白名单机制校验输入内容,杜绝动态命令拼接。

2. 越权访问(高危)

漏洞定义:接口未做资源权限校验,用户可通过篡改参数,访问、操作不属于自身的资源(订单、用户数据、文件等),分为水平越权、垂直越权。

Code Review排查要点

  • 核查所有资源操作接口(查询、删除、修改),是否校验当前登录用户与目标资源的归属关系;

  • 排查是否存在仅依靠前端控制权限,后端无校验的场景;

  • 重点检查订单、用户信息、资产数据等核心业务接口。

危险代码示例

// 高危:未校验当前用户是否为订单归属人,任意用户可删除任意订单 @DeleteMapping("/order/{orderId}") public void deleteOrder(@PathVariable Long orderId) { orderService.delete(orderId); }

修复建议:所有资源操作接口必须在后端统一完成权限校验,在业务逻辑层集中实现权限控制,杜绝前端权限兜底、接口无校验的问题。

3. 硬编码凭证与敏感信息泄露(高危)

漏洞定义:将数据库密码、API密钥、JWT密钥、接口令牌、服务器凭证等敏感信息,直接明文写入源代码、配置文件中,代码上传仓库、流转过程中极易造成信息泄露。

Code Review排查要点

  • 检索代码、配置文件中 password、secret、key、token、credential、accessKey 等敏感关键词;

  • 排查是否存在明文存储数据库连接串、密钥、接口凭证的场景;

  • 检查代码中 console.log、print、日志输出等语句,是否打印敏感数据。

危险代码示例

// 高危:JWT密钥硬编码,代码泄露即造成全局安全风险 private static final String JWT_SECRET = "mySuperSecretKey123!";

修复建议:通过环境变量、专业密钥管理服务(AWS KMS、Vault等)统一存储敏感凭证;代码与日志中严禁输出、打印敏感信息,全程脱敏处理。

4. 跨站脚本(XSS)(高危)

漏洞定义:未对用户输入、用户生成内容做HTML编码过滤,攻击者可注入恶意JS脚本,其他用户访问页面时自动执行脚本,造成Cookie窃取、账号劫持、页面篡改等风险,位列MITRE 2025安全漏洞榜单首位。

Code Review排查要点

  • 排查所有用户输入直接渲染到HTML页面、前端DOM的场景;

  • 核查是否使用安全的编码工具类对用户内容进行转义;

  • 重点关注 innerHTML、document.write、eval 等高危前端API的使用。

危险代码示例

// 高危:直接将用户输入插入DOM,可执行恶意脚本 document.getElementById("content").innerHTML = userInput;

修复建议:使用安全编码库对用户输入统一转义;Vue、React等前端框架优先使用文本插值渲染,禁止随意使用 v-html、dangerouslySetInnerHTML 等高危属性。

5. 不安全的反序列化(高危)

漏洞定义:对HTTP请求、消息队列、缓存等外部不可信来源的数据直接反序列化,未做任何校验,攻击者可构造恶意序列化数据,触发任意代码执行、远程命令执行风险。

Code Review排查要点

  • 梳理所有外部数据接收、反序列化的代码逻辑;

  • 核查反序列化前是否完成数据类型校验、内容合法性校验;

  • 重点关注Java ObjectInputStream、Python pickle、PHP unserialize 等高危反序列化方法。

修复建议:原则上禁止反序列化不可信外部数据;业务必需场景下,通过白名单机制限制可反序列化的类与数据格式,杜绝任意数据反序列化。

🟡 中危篇(特定条件可触发安全隐患)

6. 跨站请求伪造(CSRF)(中危)

漏洞定义:攻击者诱导已登录认证的用户,在不知情的情况下发起POST、PUT、DELETE等敏感请求,完成非自愿的操作(修改密码、提交订单、修改资料等),该漏洞风险在MITRE 2025榜单中持续上升。

Code Review排查要点

  • 核查所有修改业务状态的请求,是否携带合法的CSRF校验令牌;

危险代码示例

// 高危:用户输入../etc/passwd即可遍历读取系统敏感文件 File file = new File(BASE_PATH + userInput);

修复建议:优先使用文件路径白名单机制;通过路径规范化函数处理参数后,强制校验文件路径是否在允许的目录范围内,拦截非法遍历字符。

8. 使用不安全的加密算法或弱密码学(中危)

漏洞定义:业务中使用已被破解、安全性极低的过时加密算法,或使用非安全随机数生成器,导致数据加密失效、密码可被暴力破解。

Code Review排查要点

  • 检索代码中 MD5、SHA-1、DES、RC4 等弱加密算法的使用场景;

  • 核查用户密码、敏感数据是否采用加盐哈希加密存储;

  • 检查随机数生成逻辑,是否使用非密码学安全的随机工具(普通Random)。

修复建议:密码存储采用bcrypt、PBKDF2、Argon2;对称加密使用AES-256;哈希算法使用SHA-256及以上;随机数统一使用密码学安全的SecureRandom。

9. 不安全的日志记录与信息泄露(中危)

漏洞定义:日志明文记录手机号、身份证、密码、Token、用户隐私等敏感数据,或接口异常直接返回完整堆栈信息、系统路径、服务器版本等内部细节,造成信息泄露。

Code Review排查要点

  • 排查所有日志输出语句,是否覆盖敏感字段脱敏逻辑;

  • 核查全局异常处理机制,是否向客户端暴露系统内部报错细节;

  • 确认生产环境日志级别,禁止开启DEBUG详细日志模式。

修复建议:手机号、身份证、密码、Token等敏感数据,日志输出前必须脱敏;客户端统一返回通用报错提示,屏蔽堆栈信息、系统路径;生产环境日志级别固定为INFO/WARN。

10. 依赖库已知漏洞(中危)

漏洞定义:项目引入的第三方依赖包、框架存在公开CVE漏洞,但长期未更新,攻击者可利用已知漏洞发起攻击,是线上漏洞的主要来源之一。

Code Review排查要点

  • 审查package.json、pom.xml、requirements.txt等依赖配置文件;

  • 核查所有依赖版本是否为安全补丁版本,是否存在过期、废弃依赖;

  • 排查是否存在未使用、冗余的第三方依赖。

修复建议:接入OWASP Dependency-Check等工具定期扫描依赖漏洞;及时迭代有安全风险的依赖版本;清理项目冗余、废弃、无人维护的依赖库。

三、如何高效开展安全Code Review

1. 建立标准化安全审查清单

将安全审查固化为Code Review必备流程,每次代码合并前,对照清单逐项核查,核心核查项如下:

  • 所有用户输入是否完成校验、过滤、转义处理;

  • 代码、配置文件中无硬编码密钥、密码等敏感信息;

  • 业务均采用安全的加密算法、工具类,无弱密码学场景;

  • 日志、接口返回信息无敏感数据与系统细节泄露;

  • 核心接口权限、资源访问校验逻辑完整。

2. 自动化工具先行,降低人工成本

通过自动化工具批量扫描基础安全问题,替代人工重复排查,让人工审查聚焦核心风险,核心工具推荐:

  • SonarQube:多语言适配,自动检测代码语法漏洞、逻辑隐患、基础安全问题;

  • OWASP Dependency-Check:专项扫描第三方依赖库已知CVE漏洞;

  • Bandit:Python项目专用静态安全扫描工具。

核心原则:自动化搞定通用简单漏洞,人工聚焦架构级、业务级高风险问题

3. 人工审查聚焦高风险核心模块

工具无法替代人工逻辑判断,以下核心模块必须100%人工重点审查:

  • 身份认证与授权模块:登录逻辑、Session/Token管理、角色权限校验、资源访问控制;

  • 敏感数据模块:用户隐私、资金数据、交易信息的加密、存储、传输逻辑;

  • 核心业务模块:涉及支付、订单、用户信息、权限变更的核心流程;

  • 外部交互模块:所有接收外部参数、用户输入、对外返回数据的接口。

4. 统一团队安全编码规范

将安全审查的核心要求前置,固化为团队编码规范,从源头规避漏洞。参考OWASP官方安全编码指南、对应技术栈框架安全最佳实践,统一团队编码标准,让开发者在编码阶段即可规避80%以上的常见安全漏洞。

四、总结

安全Code Review不是锦上添花的附加流程,而是保障系统稳定、数据安全、业务合规的核心防线。本文梳理的10类中高危漏洞,覆盖了输入验证、权限控制、数据加密、日志规范、依赖管理等全场景核心风险,是所有项目Code Review的必查项

推荐团队落地标准化安全Code Review工作流,全程闭环管控:

  1. 开发提交前:开发者对照安全清单自主自查,整改基础安全问题;

  2. CI流水线阶段:自动执行静态代码扫描、依赖漏洞检测,拦截基础风险;

  3. 人工审查阶段:Reviewer重点核查十大中高危漏洞,聚焦核心业务模块;

  4. 代码合并前:所有高危漏洞必须100%修复,中危漏洞明确整改方案与时间节点,方可合并代码。