天天看點

如何測試WEB應用程式防止SQL注入攻擊

摘要:

關鍵字:安全測試 SQL 注入攻擊 防火牆

  正文:

  WEB應用程式的安全測試,防止SQL注入攻擊,下面舉一些簡單的例子加以解釋。——Inder P Singh。

  給使用者顯示相關的存儲資料。例如,程式通過使用者輸入的登入資訊檢查使用者憑證(權限),進而隻顯示相關的功能和資料。

  将使用者輸入的資料存儲到資料庫中。例如,使用者填寫了一張表格并送出,程式立即将之存儲到資料庫中;進而,使用者可以在本次會話和下次會話中擷取這些資料。

  一些使用者輸入值可能會被接下來程式将執行的SQL語句運用到,而程式有可能不會正确執行使用者輸入的值。如果是這樣的話,蓄意使用者可以向程式提供非法資料,這些資料接下來被運用到架構中并且用來在資料庫中執行SQL語句。這就是SQL注入。該行為的結果令人鳴起警鐘。

SQL注入可能導緻以下結果:

  使用者可以以另一使用者的身份登入到程式,甚至是管理者的身份。

  使用者可以看到其他使用者的隐私資訊,如其他使用者的簡介細節,交易細節。

  使用者可以修改應用程式配置資訊以及其他使用者的資料。

  使用者可以修改資料庫的結構,甚至是删除應用資料庫中的表格。

  使用者可以控制資料庫伺服器并且按照自己意願随意執行指令。

  因為允許SQL注入的結果是相當嚴重的,是以在應用程式的安全測試階段應對SQL注入進行測試。通過對SQL注入技術有一個總體的概括,讓我們來了解一些SQL注入的實際例子!

  重點:SQL注入問題隻能在測試環境中測試

  若應用程式頁面有登入功能,程式有可能使用如下所示的動态SQL語句。這條語句本應從使用者表中傳回至少一條使用者詳細資訊作為結果,當SQL語句中含有輸入的使用者名和密碼時。

SELECT * FROM Users WHERE User_Name = ‘” & strUserName & “‘ AND Password = ‘” & strPassword & “’;”

如果測試人員輸入John作為使用者名(使用者名文本框),輸入Smith作為密碼(密碼文本框),上述SQL語句就變成:

SELECT * FROM Users WHERE User_Name = ‘John’ AND Password = ‘Smith’

  如果測試人員輸入John’-作為使用者名,不輸入密碼,那麼SQL語句變成:

SELECT * FROM Users WHERE User_Name = ‘John’– AND Password = ‘’;

  我們可以注意到,SQL語句中John後面的部分成為了注釋。如果使用者表中有一些使用者使用者名為“John”,那麼程式能夠允許測試人員以使用者John的身份登入,這樣,測試人員可以看到使用者John的隐私資訊。

  如果測試人員不知道任何程式中已存在的使用者該怎麼辦呢?在這種情況下,測試人員可以嘗試相似的使用者名像“admin”,“administrator”,“sysadmin”。如果這些使用者名在資料庫中都不存在,測試人員可以輸入John’ or ‘x’=’x作為使用者名,Smith’ or ‘x’=’x作為密碼。那麼SQL語句如以下所示:

SELECT * FROM Users WHERE User_Name = ‘John’ or ‘x’='x’ AND Password = ‘Smith’ or ‘x’=’x’;

  因為‘x’=’x’這一條件總是成立的,結果集包含使用者表中所有行。程式允許測試人員以使用者表中第一個使用者的身份登入進去。

  重點:測試人員在嘗試下列SQL注入之前應該請求擁有資料庫管理者或者開發人員權限以備份有問題的表格。

  如果測試人員輸入John’; DROP table users_details;’—作為使用者名,任意值作為密碼,那麼SQL語句如下所示:

SELECT * FROM Users WHERE User_Name = ‘John’; DROP table users_details;’ –‘ AND Password = ‘Smith’;

  這條語句将造成表格“users_details”從資料庫中永久删除。

  雖然上述例子說明的是頁面中登入功能上運用SQL注入技術,但是測試人員應在應用程式中所有接受使用者輸入的頁面運用該技術測試,如搜尋頁面,回報頁面等等。

  SQL注入可能出現在運用了SSL的程式中,即使是防火牆也不能防禦SQL注入攻擊。

  本文中,我盡量以簡單的形式解釋SQL注入技術。再次強調,SQL注入隻能在測試環境中測試,不能再開發環境,生産環境或者其他任何環境下測試。除了手工測試程式是否易受SQL注入攻擊,我們還應該使用web vulnerability scanner(一款掃描工具)來檢查SQL注入。

本文轉自 小強測試幫 51CTO部落格,原文連結:http://blog.51cto.com/xqtesting/1270637,如需轉載請自行聯系原作者