Loading

Go语言精进之路读书笔记第45条——使用模糊测试让潜在bug无处遁形

模糊测试就是指半自动地为程序提供非法的、非预期、随机的数据,并监控程序在这些输入数据下是否会出现崩溃、内置断言失败、内存泄漏、安全漏洞等情况。

45.1 模糊测试在挖掘Go代码的潜在bug中的作用

Dmitry Vyukov 2015年使用go-fuzz在Go标准库中发现了137个bug。

45.2 go-fuzz的初步工作原理

工作流程:

  • 生成随机数据
  • 将上述数据作为输入传递给被测程序
  • 观察是否有崩溃记录(crash),如果发现崩溃记录,则说明找到了潜在的bug

45.3 go-fuzz使用方法

1.安装go-fuzz
2.带有模糊测试的项目组织
3.go-fuzz-build
4.执行go-fuzz

适用场景:

  • 处理复杂输入数据的程序
  • 比如文件格式解析、网络协议解析、人机交互界面入口等

45.4 使用go-fuzz建立模糊测试的示例

被测代码

func ParseComplex(data [] byte) bool {
    if len(data) == 5 {
        if data[0] == 'F' && data[1] == 'U' && data[2] == 'Z' && data[3] == 'Z' && data[4] == 'I' && data[5] == 'T' {
            return true
        }
    }
    return false
}

fuzz测试代码

// +build gofuzz

package parser

func Fuzz(data []byte) int {
    ParseComplex(data)
    return 0
}

45.5 让模糊测试成为“一等公民”

Go工具链还没有在原生上支持go-fuzz

posted @ 2024-03-10 20:13  brynchen  阅读(8)  评论(0编辑  收藏  举报