• Java相关|Code Review Checklist(Server)


    安全
    1. 所有入参均经过校验,包括验证参数数据类型、范围、长度,尽可能采用白名单形式验证所有的输入。对于非法请求,记录WARN log。参考Input Validation Cheat Sheet;前后端统一校验标准,最好统一自动生成代码。
    2. 避免拼接客户端可控参数到SQL语句,采用预编译形式执行SQL,尽可能使用#{},特殊场景需使用${}时必须对参数做严格校验,比如限制类型、长度等。
    3. 对于服务端内部异常,统一返回Error Code和Error Message,避免返回Stacktrace等内部系统细节,参考统一异常处理&错误码规范使用说明
    4. 所有接口读写敏感数据前必须增加 session 鉴权,校验数据归属为当前登录账户。
    5. 敏感信息不要硬编码到代码中(比如密码等)。
    6. 非公开页面或资源,必须要求服务端身份验证。
    7. 符合Least Privilege原则,具备逻辑严密的权限配置。
    8. 重要数据变动皆有审计日志,日志中不要保存敏感信息(系统详细信息、会话session或密码等)。
    9. 所有上传文件类型必须要做白名单检查,且统一存储到OSS。
    10. 禁止在代码中留任何形式的后门
    兼容性
    1. 所有的模块外部接口不存在兼容性问题;
    2. 如果有DB Migration,说明需在发布前或发布后执行,兼容平滑发布;
    3. 所有的DB Schema变动均已考虑对统计的影响;
    4. 数据的含义或处理逻辑有变更时,考虑对存量/在途数据的影响;
    性能
    1. 相关DB查询有恰当的索引;
    2. 接口处理时间与数据库中既有数据量不存在相关性;
    3. 批量数据处理、定时任务、离线处理等重度DB和计算的任务,需与业务进程隔离,尽可能用只读数据源;
    4. 严格控制批量导入功能的开发;
    5. 对与高Hit Ratio的查询进行缓存处理。数据更新时,根据业务需求采用合适的缓存刷新策略;
    6. 全文搜索相关的使用ES进行支持;
    7. 没有WHERE的语句需要加上LIMIT;
    质量
    1. 相当的可读性,可自解释,不可自解释的地方有相应的注释。外部接口有详细Java Doc,DB Schema有详细注释,并有相应的E-R图;
    2. 主要流程被Unit Test覆盖;
    3. 通过SonarLint检测没有严重Issue;
    4. DB业务关键字段加上NOT NULL Constraint;
    标准
    1. HTTP Return Code
    2. 正常请求返回200
    3. 非法参数返回400
    4. 未登录或没有权限返回403
    5. 服务器内部错误返回500,并给出Error ID(Request ID),但隐藏Error细节
    6. Git Commit的Comment需带上禅道的Issue No,如: TASK-d+ *** 或者BUG-d+ ***
  • 相关阅读:
    MySQL之索引
    MySQL之用户权限及pymysql
    Vue初识
    input标签的accept属性、JQuery绑定keyDown事件
    给bootstrap-sweetalert弹框的按钮绑定事件
    JavaScript FormData对象,FileReader对象,files属性
    Django CBV加装饰器、Django中间件、auth模块
    Django session和cookie
    Django form组件
    Django ajax的简单使用、自定义分页器
  • 原文地址:https://www.cnblogs.com/wangzepu/p/9790634.html
Copyright © 2020-2023  润新知