![cover image](https://wikiwandv2-19431.kxcdn.com/_next/image?url=https://upload.wikimedia.org/wikipedia/commons/thumb/0/05/American_fuzzy_lop%2527s_afl-fuzz_running_on_a_test_program.png/640px-American_fuzzy_lop%2527s_afl-fuzz_running_on_a_test_program.png&w=640&q=50)
模糊测试
自動化軟件測試技術 / 维基百科,自由的 encyclopedia
模糊测试 (fuzz testing, fuzzing)是一种软件测试技术。其核心思想是将自动或半自动生成的随机数据输入到一个程序中,并监视程序异常,如崩溃,断言(assertion)失败,以发现可能的程序错误,比如内存泄漏。模糊测试常常用于检测软件或计算机系统的安全漏洞。
![Thumb image](http://upload.wikimedia.org/wikipedia/commons/thumb/0/05/American_fuzzy_lop%27s_afl-fuzz_running_on_a_test_program.png/640px-American_fuzzy_lop%27s_afl-fuzz_running_on_a_test_program.png)
模糊测试最早由威斯康星大学的Barton Miller于1988年提出。[1][2]他们的工作不仅使用随机无结构的测试数据,还系统的利用了一系列的工具去分析不同平台上的各种软件,并对测试发现的错误进行了系统的分析。此外,他们还公开了源代码,测试流程以及原始结果数据。
模糊测试工具主要分为两类,变异测试(mutation-based)以及生成测试(generation-based)。模糊测试可以被用作白盒,灰盒或黑盒测试。[3]文件格式与网络协议是最常见的测试目标,但任何程序输入都可以作为测试对象。常见的输入有环境变量,鼠标和键盘事件以及API调用序列。甚至一些通常不被考虑成输入的对象也可以被测试,比如数据库中的数据或共享内存。
对于安全相关的测试,那些跨越可信边界的数据是最令人感兴趣的。比如,模糊测试那些处理任意用户上传的文件的代码比测试解析服务器配置文件的代码更重要。因为服务器配置文件往往只能被有一定权限的用户修改。