第二十二天、单元测试与系统安全规约

155 阅读1分钟

1.单元测试

1.软件测试

指通过手工或者工具对被测对象进行测试操作,以此来验证实际结果和预期之间是否存在差异。

2. 研发与测试周期的W模型

image.png

3.单元测试

单元测试是对软件组成单元进行的测试。其目的就是检验软件基本组成单位的正确性。测试对象是软件设计的最小单元-模块。又被称之为模块测试。
单元测试的好处: - 提高软件质量 - 促进代码优化 - 提升研发效率 项目问题的解决成本随着项目的进展越来越昂贵,单元测试成本 < 集成测试 < 系统测试

4.单元测试的AIR原则

单元测试应该保证如下原则:

  • A(Automatic):自动化。单测是支持自动执行的
  • I(Independent):独立性。单侧不影响项目的实体逻辑
  • R(Repeatable):可重复性。单侧在某种程度上可以复用

5.单侧的BCDE原则

  • B(Border):边界值测试。包含在测试域的测试点叫做内点,处在边界的叫做上点,不在测试域的叫做离点
  • C(Correct):正确的输入,并得到预期的结果
  • D(Design):与设计文档相结合
  • E(Error):证明程序有错

6.常用的单元测试框架

  • Junit: 一个开发源代码的Java测试框架,用于编写和运行可重复的测试。
  • Mockito:一个Mock工具,用于模拟各种对象和组件,模拟函数返回值,模拟void类型的异常。
  • Spring-test:集成各种测试框架的组合框架。
  • Hamcrest:一个测试框架,提供了一整套通用的匹配符Matcher。
  • JSONassert:一个专门用户json断言的工具

2. 系统安全规约

1.权限控制

  • 越权访问漏洞 越权访问(Broken Access Controller,简称BAC)是web应用程序中常见的一种漏洞,存在范围光,危害大,被OWASP列为web应用十大安全隐患的第二名。
    越权访问氛围垂直的不同权限访问,也分为水平的相同权限的不同人员之间的访问。
    水平越权访问:是一种基于数据的访问权限控制设计缺陷引起的漏洞,由于服务器端在接收到请求数据进行操作时,没有判断数据的所属人/所属部门从而导致的越权数据访问漏洞。
    越权访问的防范措施:
    • 前后端同事对用户输入的信息进行校验,双重校验机制
    • 调用功能前,验证用户是否有权限调用相关功能
    • 执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
    • 直接对象引用的资源ID要加密,防止功能者枚举ID,敏感数据特殊化处理
    • 永远不要相信来自用户的输入,对于可控的参数进行严格的检查与过滤

2.敏感数据的处理

敏感数据要遵循如下处理:

  • 特殊信息需要授权才能访问
  • 特殊信息脱敏,脱敏的重要原则为
    • 保持原有数据特征
    • 保持数据之间的一致性
    • 保持业务规则的关联性
    • 多次脱敏之间的数据一致性
  • 特殊信息加密存取 通过编写拦截器来实现特殊信息的加密操作
  • 特殊信息加密传输 通过编写拦截器来实现特殊信息的加密传输操作

3.SQL注入攻击

通过把SQL命令插入到Web表单递交或者输入域名或页面请求的查询字符串,最终达到七篇服务器执行恶意的SQL命令。动态生成sql语句时没有对用户输入的数据进行校验是Sql注入攻击得逞的主要原因。 Mybatis框架SQL注入漏洞的场景

  • 使用$符直接拼接
  • 模糊查询like后的参数
  • in之后的参数
  • order by之后 常用防御手段:
  • 过滤危险字符
  • 使用预编译语句JDBC PrepareStatement
  • 参数化查询:Hibernate、Mybatis

4.XSS跨站点脚本攻击及其防御

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

  • 输入过滤:单引号、双引号、<、>等
  • 编码转换:HTML实体编码,JavaScripe编码
  • Cookie安全策略,HttpOnly
  • 后端可以通过配置XSS过滤器针对于所有的入参进行转换

5.防御重放攻击

接口未作任务校验,导致接口持续被刷,从而导致遭受损失。 解决:

  • 接口添加时间戳校验,超过有效时间的请求即视为异常请求,不予处理
  • 接入Sentinel实现限流、熔断,流量监控,从而达到限流的目的