这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战
关于单元测试的两个原则
宏观上要符合AIR原则
AIR即空气,单元测试亦是如此,如业务代码在线上运行时,可能感觉不到测试用例的存在和价值,但在代码质量的保障上却是非常关键的.新增代码应该同步增加测试用例,个性代码逻辑时也应该同步保证测试用例成功执行,AIR原则具体包括:
- A:Automatic(自动化)
- I:Independent(独立性)
- R:Repeatable(可重复)
简单解释一下三个原则:
- 单元测试应该是全自动执行的.测试用例通常会被频繁地触发执行,执行过程必须完全自动化才有意义
- 如果单元测试的输出结果需要人工介入检查,那么它一定是不合格的,单元测试中不允许使用System.out等方式来进行人工验证,而必须使用断言来验证
- 为了保证单元测试稳定可靠且便于维护,需要保证其独立性.用例之间不允许互相调用,也不允许出现执行次序的先后依赖
微观上要符合BCDE原则
编写单元测试用例时,为了保证被测模块的交付质量,需要符合BCDE原则
- B:Border,边界测试,包括循环边界、特殊取值、特殊时间点、数据顺序等
- C:Correct,正确的输入,并得到预期的结果
- D:Design,与设计文档相结合,来编写单元测试
- E:Error,单元测试的目标是证明程序有错,而不是程序无错.为了发现代码中潜在的错误,我们需要在编写测试用例时有一些强制的错误输入(如非法数据、异常流程、非业务允许输入等)来得到预期的错误结果
系统安全规约实践
越权访问的防范
- 前后端同时对用户输入信息进行校验,双重验证机制
- 调用功能前,验证用户是否有权限调用相关功能
- 执行读取操作前必须验证用户身份,验证用户是否具备操作数据的权限
- 直接对象引用的资源ID要加密,防止攻击者枚举ID,敏感数据特殊化处理
- 永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤
敏感数据的处理
- 特殊信息授权
- 特殊信息脱敏
- 特殊信息加密存取
- 特殊信息加密传输
SQL注入的防御
所谓SQL注入,就是通过把sQL命令插入到Web表彰递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.动态生成Sql语句时没有对用户输入的灵气进行验证是Sql注入攻击得逞的主要原因
SQL注入常用防御手段
- 过滤危险字符
- 使用预编译语句:JDBC PrepareStatement
- 参数化查询:Hibernate、Mybatis
XSS的防御
XSS跨站脚本攻击(Cross Site Scripting,XSS)发生在客户端,可被用于进行窃取隐私、钓鱼欺骗、偷取密码、传播恶意代码等攻击行为
防御手段
- 输入过滤:单引号、双引号、
<>
等 - 编码转换:HTML实体编码、JavaScript编码
- Cookie安全策略:HttpOnly