模糊測試

模糊測試 （ fuzz testing, fuzzing ） 是一種軟件測試技術 。 其核心思想是將自動或半自動生成的隨機數據輸入到一個程序中 ， 並監視程序異常 ， 如崩潰 ， 斷言 （ assertion ） 失敗 ， 以發現可能的程序錯誤 ， 比如內存泄漏 。 模糊測試常常用於檢測軟件或計算機系統的安全漏洞 。 模糊測試最早由威斯康星大學的Barton Miller於1988年提出 。 他們的工作不僅使用隨機無結構的測試數據 ， 還系統的利用了一系列的工具去分析不同平臺上的各種軟件 ， 並對測試發現的錯誤進行了系統的分析 。 此外 ， 他們還公開了源代碼 ， 測試流程以及原始結果數據 。 模糊測試工具主要分爲兩類 ， 變異測試 （ mutation - based ） 以及生成測試 （ generation - based ） 。 模糊測試可以被用作白盒 ， 灰盒或黑盒測試 。 文件格式與網絡協議是最常見的測試目標 ， 但任何程序輸入都可以作爲測試對象 。 常見的輸入有環境變量 ， 鼠標和鍵盤事件以及API調用序列 。 甚至一些通常不被考慮成輸入的對象也可以被測試 ， 比如數據庫中的數據或共享內存 。 對於安全相關的測試 ， 那些跨越可信邊界的數據是最令人感興趣的 。 比如 ， 模糊測試那些處理任意用戶上傳的文件的代碼比測試解析服務器配置文件的代碼更重要 。 因爲服務器配置文件往往只能被有一定權限的用戶修改 。