孤尽T31训练营10单元测试与系统安全规约笔记

180 阅读3分钟

这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

关于单元测试的两个原则

宏观上要符合AIR原则

AIR即空气,单元测试亦是如此,如业务代码在线上运行时,可能感觉不到测试用例的存在和价值,但在代码质量的保障上却是非常关键的.新增代码应该同步增加测试用例,个性代码逻辑时也应该同步保证测试用例成功执行,AIR原则具体包括:

  • A:Automatic(自动化)
  • I:Independent(独立性)
  • R:Repeatable(可重复)

简单解释一下三个原则:

  • 单元测试应该是全自动执行的.测试用例通常会被频繁地触发执行,执行过程必须完全自动化才有意义
  • 如果单元测试的输出结果需要人工介入检查,那么它一定是不合格的,单元测试中不允许使用System.out等方式来进行人工验证,而必须使用断言来验证
  • 为了保证单元测试稳定可靠且便于维护,需要保证其独立性.用例之间不允许互相调用,也不允许出现执行次序的先后依赖

微观上要符合BCDE原则

编写单元测试用例时,为了保证被测模块的交付质量,需要符合BCDE原则

  • B:Border,边界测试,包括循环边界、特殊取值、特殊时间点、数据顺序等
  • C:Correct,正确的输入,并得到预期的结果
  • D:Design,与设计文档相结合,来编写单元测试
  • E:Error,单元测试的目标是证明程序有错,而不是程序无错.为了发现代码中潜在的错误,我们需要在编写测试用例时有一些强制的错误输入(如非法数据、异常流程、非业务允许输入等)来得到预期的错误结果

系统安全规约实践

越权访问的防范

  1. 前后端同时对用户输入信息进行校验,双重验证机制
  2. 调用功能前,验证用户是否有权限调用相关功能
  3. 执行读取操作前必须验证用户身份,验证用户是否具备操作数据的权限
  4. 直接对象引用的资源ID要加密,防止攻击者枚举ID,敏感数据特殊化处理
  5. 永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤

敏感数据的处理

  1. 特殊信息授权
  2. 特殊信息脱敏
  3. 特殊信息加密存取
  4. 特殊信息加密传输

SQL注入的防御

所谓SQL注入,就是通过把sQL命令插入到Web表彰递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.动态生成Sql语句时没有对用户输入的灵气进行验证是Sql注入攻击得逞的主要原因

SQL注入常用防御手段

  1. 过滤危险字符
  2. 使用预编译语句:JDBC PrepareStatement
  3. 参数化查询:Hibernate、Mybatis

XSS的防御

XSS跨站脚本攻击(Cross Site Scripting,XSS)发生在客户端,可被用于进行窃取隐私、钓鱼欺骗、偷取密码、传播恶意代码等攻击行为

防御手段

  1. 输入过滤:单引号、双引号、<>
  2. 编码转换:HTML实体编码、JavaScript编码
  3. Cookie安全策略:HttpOnly