代码评审


代码评审

代码行

  • 用到变量是否可能为null
  • 是否会有越界访问, 如访问不存在的索引的数组或不存在key的字典
  • 调用函数是否可能抛出异常,或返回错误

函数

  • 每个输入参数是否可空,类型是否正确,范围是否正常
  • 代码行数是否过多

  • 职责是否单一
  • 是否依赖了过多的类
  • 是否有不属于该类抽象层次的函数

安全

代码安全

  • JSONP函数名要编码
  • echo的地方要XSS编码
  • SQL执行要参数化,不能拼
  • redirect的目标地址要限制domain

API安全

  • 写操作要防止CSRF
  • 私有数据访问要鉴权
  • 要涉及越权访问返回码,防止越权访问
  • 资源消耗类API要增加频率限制, 如注册帐号,短信,邮件,等

细节

  • SQL关键字要大写
  • 错误码要规划
  • css样式不要写成inline方式
  • 标点后面要有空格, 运算符左右有空格,函数名后面无空格
  • 不要Select *
  • 函数和类要加规范化注释, 时间长就忘了

登录功能

  • 用户名长度限制,不区分大小写
  • 密码进行慢速hash,撒随机盐
  • 图形验证码
  • 短信验证码
  • 邮件激活
  • 短信验证码防刷
  • oAuth登录
  • 密码复杂度验证
  • 用户名不能重复
  • 用邮箱做登录标识还是用用户名做表示
  • 修改密码的流程
  • 修改邮箱的流程
  • 修改手机号的流程, 要重新验证手机
  • 双因素认证
  • 社工库
  • 手机号不能重复
  • 忘记密码
  • 注册时记录注册IP,登录时记录最后一次登录IP
  • 登录区域保护,当用户不在常用区域登陆时给予邮件提醒
  • 用户表分表分库
  • 修改数据库后更新session缓存
  • 如何应对集中的登录
  • 查看 Nginx 日志
  • 统计每天登录,活跃情况报表
  • 读写分离
  • 错误码管理

注: code_review.md