代码评审
代码行
- 用到变量是否可能为null
- 是否会有越界访问, 如访问不存在的索引的数组或不存在key的字典
- 调用函数是否可能抛出异常,或返回错误
函数
- 每个输入参数是否可空,类型是否正确,范围是否正常
- 代码行数是否过多
类
- 职责是否单一
- 是否依赖了过多的类
- 是否有不属于该类抽象层次的函数
安全
代码安全
- JSONP函数名要编码
- echo的地方要XSS编码
- SQL执行要参数化,不能拼
- redirect的目标地址要限制domain
API安全
- 写操作要防止CSRF
- 私有数据访问要鉴权
- 要涉及越权访问返回码,防止越权访问
- 资源消耗类API要增加频率限制, 如注册帐号,短信,邮件,等
细节
- SQL关键字要大写
- 错误码要规划
- css样式不要写成inline方式
- 标点后面要有空格, 运算符左右有空格,函数名后面无空格
- 不要Select *
- 函数和类要加规范化注释, 时间长就忘了
登录功能
- 用户名长度限制,不区分大小写
- 密码进行慢速hash,撒随机盐
- 图形验证码
- 短信验证码
- 邮件激活
- 短信验证码防刷
- oAuth登录
- 密码复杂度验证
- 用户名不能重复
- 用邮箱做登录标识还是用用户名做表示
- 修改密码的流程
- 修改邮箱的流程
- 修改手机号的流程, 要重新验证手机
- 双因素认证
- 社工库
- 手机号不能重复
- 忘记密码
- 注册时记录注册IP,登录时记录最后一次登录IP
- 登录区域保护,当用户不在常用区域登陆时给予邮件提醒
- 用户表分表分库
- 修改数据库后更新session缓存
- 如何应对集中的登录
- 查看 Nginx 日志
- 统计每天登录,活跃情况报表
- 读写分离
- 错误码管理