1. 安全性漏洞
注入攻击:检查SQL注入、OS命令注入、XML注入等(如未参数化的查询)。
跨站脚本(XSS):验证用户输入是否被转义或过滤。
敏感数据泄露:硬编码的密码、API密钥、加密密钥等。
权限问题:越权访问(水平/垂直权限缺失)、不安全的直接对象引用(IDOR)。
缓冲区溢出:C/C++代码中数组越界或未校验输入长度。
依赖安全:第三方库/组件是否存在已知漏洞(如通过工具扫描CVE)。
2. 代码质量
代码规范:是否符合团队的编码规范(命名、缩进、注释等)。
重复代码:识别冗余代码块,建议抽象为函数或模块。
复杂度:高圈复杂度(Cyclomatic Complexity)可能增加维护难度。
异常处理:是否捕获所有可能的异常?是否有裸的
catch
语句?资源管理:文件、数据库连接、网络连接是否正确释放(避免资源泄漏)。
3. 性能问题
低效算法:是否存在时间复杂度高的操作(如嵌套循环)?
内存泄漏:动态分配的内存是否释放(尤其C/C++)?
I/O操作:是否频繁读写文件或数据库?是否有不必要的阻塞调用?
缓存滥用:缓存策略是否合理?是否可能导致脏数据?
4. 业务逻辑正确性
边界条件:极端输入(空值、超长字符串、负数)是否处理?
并发问题:竞态条件、死锁、线程安全(如共享变量未加锁)。
数值计算:整数溢出、浮点精度误差、除零错误。
业务规则:代码逻辑是否与需求文档一致?
5. 可维护性
模块化:代码是否高内聚、低耦合?
注释与文档:关键逻辑是否有清晰注释?API是否有文档?
魔术数字/字符串:是否替换为常量或枚举?
依赖关系:模块间依赖是否合理?是否存在循环依赖?
6. 测试覆盖
单元测试:关键函数是否有单元测试?覆盖率是否达标?
边缘用例:测试用例是否覆盖边界条件和异常场景?
Mock使用:外部依赖(如数据库、API)是否被正确Mock?
7. 合规性要求
数据隐私:是否符合GDPR、CCPA等法规(如日志中记录敏感数据)?
行业标准:是否遵循OWASP Top 10、CWE、MISRA(嵌入式系统)等标准?
许可证合规:第三方库的许可证是否与项目兼容(如GPL传染性)?
8. 工具辅助
静态分析工具:使用SonarQube、Fortify、Coverity等自动化扫描。
动态分析工具:结合模糊测试(Fuzzing)或渗透测试。
依赖扫描:工具如Dependabot、Snyk检查依赖漏洞。
9. 审计流程建议
明确目标:聚焦高风险模块(如身份认证、支付逻辑)。
分层检查:先架构设计,再逐层深入函数实现。
记录与跟踪:使用问题跟踪系统(如JIRA)记录缺陷并闭环。
团队协作:结合开发人员解释复杂逻辑,避免误判。
通过系统化的代码审计,可以显著降低软件风险,提升整体质量。建议将审计纳入CI/CD流程,实现持续监控。