強制錯誤信息出現是使錯誤代碼執行的最好方法。軟件應該正確地響應錯誤的輸入或者首先應該成功地防止輸入進入到軟件中。有把握了解的的唯一辦法是用一批錯誤的輸入測試應用程序?;蛟S最重要的是了解應用程序如何響應不正確的輸入。我設法驗證以下三種不同的錯誤處理器的類型:
輸入過濾器(Input filters):能夠用于預防錯誤的輸入進入所測試的軟件(software under test)。有效的過濾錯誤的輸入,例如,一個圖形用戶界面,只允許合法的輸入通過界面
輸入校驗(Input checking): 可以執行以確保軟件不會執行使用錯誤的輸入。最簡單的例子是每次輸入一個到系統中,開發人員插入一條IF語句以確保數據在處理之前輸入是合法的。換句話說,如果輸入是合法的,那么就除了它,否則顯示一個錯誤信息。在這個優先的攻擊時,我們的目標是確保我們看見了所有這樣的錯誤信息。
異常處理器(Exception handlers): 是一種最后才采用的方法,并且常用于在系統由于處理了錯誤輸入而導致的失敗之后清理錯誤。換句話說,錯誤的輸入允許進入稀土女冠,被處理后,系統出現了錯誤。異常處理器是一種常見的程序,在軟件失敗時被調用。它通常包括重新設置內部變量,關閉文件并且恢復軟件和用戶交互能力的代碼。一般來說,也會顯示一些錯誤信息。
測試人員必須考慮所測試軟件可以接受的輸入并且集中在不正確數值上。在這里的方法是輸入太打,太小,太長,太短的數值,這些數值是超出了可接受的范圍或是錯誤的數據類型的數值。這種方法可以發現的主要的缺陷是遺漏了錯誤的情況-開發人員不知道哪些輸入的數據是錯誤的或被忽略的個別情況。遺漏的情況通常導致軟件中止或崩潰。測試人員也應該查看錯誤信息放錯位置的情況。有時開發人員正確地獲得了錯誤信息,但是卻把它安排給了錯誤的輸入數值。因此,對于那個提交的輸入數值而言,這個錯誤信息就好像是胡說八道。
最后,純粹惡作劇的數據是不能提供任何信息的錯誤消息。盡管這樣的信息不會引起對用戶直接的傷害,但是他們是草率的并且在用戶的頭腦里投下了對軟件制造商的誠信的懷疑?!癊rror 5—Unknown Data” 對于一些開發人員來說可能看上去是一個好的主意,但是它將在用戶的頭腦里產生挫敗,用戶不知道他們什么地方做錯了。不管測試人員正在測試一個GUI面板中的輸入字段還是測試一個API調用中的參數,測試人員必須在執行這個攻擊時思考輸入的屬性。如下是一些常見的應該思考的屬性:
輸入類型(Input type): 輸入無效類型通常將產生一個錯誤信息。例如,如果“問題”的輸入類型是整數,那些嘗試輸入一個真實的數字或一個字符。
輸入長度(Input length): 對于字符(字母和數字)類型的輸入,輸入少量的很多的字符將引起錯誤信息。
邊界值(Boundary values):每一個數字數據類型有邊界值,并且有時這些數值代表著特殊的情況。例如,整數0就是正數和負數的邊界。