當前位置:首頁 » 編程語言 » sql注入攻擊與防範工具
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql注入攻擊與防範工具

發布時間: 2022-04-19 00:35:34

sql注入攻擊與防禦的內容簡介

SQL注入是Internet上最危險、最有名的安全漏洞之一,《SQL注入攻擊與防禦》是目前唯一一本專門致力於講解SQL威脅的圖書。《SQL注入攻擊與防禦》作者均是專門研究SQL注入的安全專家,他們集眾家之長,對應用程序的基本編碼和升級維護進行全面跟蹤,詳細講解可能引發SQL注入的行為以及攻擊者的利用要素,並結合長期實踐經驗提出了相應的解決方案。針對SQL注入隱蔽性極強的特點,《SQL注入攻擊與防禦》重點講解了SQL注入的排查方法和可以藉助的工具,總結了常見的利用SQL漏洞的方法。另外,《SQL注入攻擊與防禦》還專門從代碼層和系統層的角度介紹了避免SQL注入的各種策略和需要考慮的問題。
《SQL注入攻擊與防禦》主要內容:
SQL注入一直長期存在,但最近有所增強。《SQL注入攻擊與防禦》包含所有與SQL注入攻擊相關的、當前已知的信息,凝聚了由《SQL注入攻擊與防禦》作者組成的、無私奉獻的SQL注入專家團隊的所有深刻見解。
什麼是SQL注入?理解它是什麼以及它的基本原理
查找、確認和自動發現SQL注入
查找代碼中SQL注入時的提示和技巧
使用SQL注入創建利用
通過設計來避免由SQL攻擊所帶來的危險

㈡ sql注入攻擊與防禦是什麼

SQL注入攻擊:

惡意用戶在提交查詢請求的過程中將SQL語句插入到請求內容中,同時程序本身對用戶輸入內容過分信任而未對惡意用戶插入的SQL語句進行過濾,導致SQL語句直接被服務端執行。

SQL注入攻擊分類:

①注入點的不同分類:數字類型的注入、字元串類型的注入。

②提交方式的不同分類:GET注入、POST注入、COOKIE注入、HTTP注入。

③獲取信息方式的不同分類:基於布爾的盲注、基於時間的盲注、基於報錯的盲注。

SQL注入攻擊防禦方法:

①定製黑名單:將常用的SQL注入字元寫入到黑名單中,然後通過程序對用戶提交的POST、GET請求以及請求中的各個欄位都進行過濾檢查,篩選威脅字元。

②限制查詢長度:由於SQL注入過程中需要構造較長的SQL語句,因此,一些特定的程序可以使用限制用戶提交的請求內容的長度來達到防禦SQL注入的目的,但這種效果不太好。

③限制查詢類型:限制用戶請求內容中每個欄位的類型,並在用戶提交請求的時候進行檢查,凡不符合該類型的提交方式就認為是非法請求。

④白名單法:該方法只對部分程序有效,對一些請求內容相對固定的程序,可以制定請求內容的白名單,比如:某程序接受的請求只有數字,且數字為1-100,這樣可以檢查程序接受的請求內容是否匹配,如果不匹配,則認為是非法請求。

⑤設置資料庫許可權:根據程序要求為特定的表設置特定的許可權,如:某段程序對某表只需具備select許可權即可,這樣即使程序存在問題,惡意用戶也無法對表進行update或insert等寫入操作。

⑥限制目錄許可權:Web目錄應至少遵循可寫目錄不可執行,可執行目錄不可寫的原則;在此基礎上,對各目錄進行必要的許可權細化。

㈢ sql注入如何防止

1、使用參數化篩選語句

為了防止SQL注入,用戶輸入不能直接嵌入到SQL語句中。相反,用戶輸入必須被過濾或參數化。參數語句使用參數,而不是將用戶輸入嵌入語句中。在大多數情況下,SQL語句是正確的。然後,用戶輸入僅限於一個參數。

一般來說,有兩種方法可以確保應用程序不易受到SQL注入攻擊。一種是使用代碼審查,另一種是強制使用參數化語句。強制使用參數化語句意味著在運行時將拒絕嵌入用戶輸入中的SQL語句。但是,目前對此功能的支持不多。

2、避免使用解釋程序,這是黑 客用來執行非法命令的手段。

3、防止SQL注入,但也避免一些詳細的錯誤消息,因為黑客可以使用這些消息。標準的輸入驗證機制用於驗證所有輸入數據的長度、類型、語句和企業規則。

4、使用漏洞掃描工具。

但是,防範SQL注入攻擊是不夠的。攻擊者現在自動搜索和攻擊目標。它的技術甚至可以很容易地應用於其他Web體系結構中的漏洞。企業應該投資於專業的漏洞掃描工具,如著名的Accunetix網路漏洞掃描程序。完美的漏洞掃描器不同於網路掃描器,它專門在網站上查找SQL注入漏洞。最新的漏洞掃描程序可以找到最新發現的漏洞。

5、最後,做好代碼審計和安全測試。

㈣ SQL注入攻擊的種類和防範手段有哪些

暈,這不是C#考題嗎。
SQL注入攻擊的種類

知彼知己,方可取勝。首先要清楚SQL注入攻擊有哪些種類。

1.沒有正確過濾轉義字元

在用戶的輸入沒有為轉義字元過濾時,就會發生這種形式的注入式攻擊,它會被傳遞給一個SQL語句。這樣就會導致應用程序的終端用戶對資料庫上的語句實施操縱。比方說,下面的這行代碼就會演示這種漏洞:

statement := "SELECT * FROM users WHERE name = '" + userName + "'; "

這種代碼的設計目的是將一個特定的用戶從其用戶表中取出,但是,如果用戶名被一個惡意的用戶用一種特定的方式偽造,這個語句所執行的操作可能就不僅僅是代碼的作者所期望的那樣了。例如,將用戶名變數(即username)設置為:

a' or 't'='t,此時原始語句發生了變化:

SELECT * FROM users WHERE name = 'a' OR 't'='t';

如果這種代碼被用於一個認證過程,那麼這個例子就能夠強迫選擇一個合法的用戶名,因為賦值't'='t永遠是正確的。

在一些SQL伺服器上,如在SQLServer中,任何一個SQL命令都可以通過這種方法被注入,包括執行多個語句。下面語句中的username的值將會導致刪除「users」表,又可以從「data」表中選擇所有的數據(實際上就是透露了每一個用戶的信息)。

a'; DROP TABLE users; SELECT * FROM data WHERE name LIKE '%

這就將最終的SQL語句變成下面這個樣子:

SELECT * FROM users WHERE name = 'a'; DROP TABLE users; SELECT * FROM DATA WHERE name LIKE '%';

其它的SQL執行不會將執行同樣查詢中的多個命令作為一項安全措施。這會防止攻擊者注入完全獨立的查詢,不過卻不會阻止攻擊者修改查詢。

2.Incorrect type handling

如果一個用戶提供的欄位並非一個強類型,或者沒有實施類型強制,就會發生這種形式的攻擊。當在一個SQL語句中使用一個數字欄位時,如果程序員沒有檢查用戶輸入的合法性(是否為數字型)就會發生這種攻擊。例如:

statement := "SELECT * FROM data WHERE id = " + a_variable + "; "

從這個語句可以看出,作者希望a_variable是一個與「id」欄位有關的數字。不過,如果終端用戶選擇一個字元串,就繞過了對轉義字元的需要。例 如,將a_variable設置為:1; DROP TABLE users,它會將「users」表從資料庫中刪除,SQL語句變成:SELECT * FROM DATA WHERE id = 1; DROP TABLE users;

3.資料庫伺服器中的漏洞

有時,資料庫伺服器軟體中也存在著漏洞,如MYSQL伺服器中mysql_real_escape_string()函數漏洞。這種漏洞允許一個攻擊者根據錯誤的統一字元編碼執行一次成功的SQL注入式攻擊。

4.盲目SQL注入式攻擊

當一個Web應用程序易於遭受攻擊而其結果對攻擊者卻不見時,就會發生所謂的盲目SQL注入式攻擊。有漏洞的網頁可能並不會顯示數據,而是根據注入到合法 語句中的邏輯語句的結果顯示不同的內容。這種攻擊相當耗時,因為必須為每一個獲得的位元組而精心構造一個新的語句。但是一旦漏洞的位置和目標信息的位置被確 立以後,一種稱為Absinthe的工具就可以使這種攻擊自動化。

5.條件響應

注意,有一種SQL注入迫使資料庫在一個普通的應用程序屏幕上計算一個邏輯語句的值:

SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=1

這會導致一個標準的面面,而語句

SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=2在頁面易於受到SQL注入式攻擊時,它有可能給出一個不同的結果。如此這般的一次注入將會證明盲目的SQL注入是可能的,它會使攻擊者根據另外一個 表中的某欄位內容設計可以評判真偽的語句。

6.條件性差錯

如果WHERE語句為真,這種類型的盲目SQL注入會迫使資料庫評判一個引起錯誤的語句,從而導致一個SQL錯誤。例如:

SELECT 1/0 FROM users WHERE username='Ralph'。顯然,如果用戶Ralph存在的話,被零除將導致錯誤。

7.時間延誤

時間延誤是一種盲目的SQL注入,根據所注入的邏輯,它可以導致SQL引擎執行一個長隊列或者是一個時間延誤語句。攻擊者可以衡量頁面載入的時間,從而決定所注入的語句是否為真。

以上僅是對SQL攻擊的粗略分類。但從技術上講,如今的SQL注入攻擊者們在如何找出有漏洞的網站方面更加聰明,也更加全面了。出現了一些新型的SQL攻 擊手段。黑客們可以使用各種工具來加速漏洞的利用過程。我們不妨看看the Asprox Trojan這種木馬,它主要通過一個發布郵件的僵屍網路來傳播,其整個工作過程可以這樣描述:首先,通過受到控制的主機發送的垃圾郵件將此木馬安裝到電 腦上,然後,受到此木馬感染的電腦會下載一段二進制代碼,在其啟動時,它會使用搜索引擎搜索用微軟的ASP技術建立表單的、有漏洞的網站。搜索的結果就成 為SQL注入攻擊的靶子清單。接著,這個木馬會向這些站點發動SQL注入式攻擊,使有些網站受到控制、破壞。訪問這些受到控制和破壞的網站的用戶將會受到 欺騙,從另外一個站點下載一段惡意的JavaScript代碼。最後,這段代碼將用戶指引到第三個站點,這里有更多的惡意軟體,如竊取口令的木馬。

以前,我們經常警告或建議Web應用程序的程序員們對其代碼進行測試並打補丁,雖然SQL注入漏洞被發現和利用的機率並不太高。但近來攻擊者們越來越多地 發現並惡意地利用這些漏洞。因此,在部署其軟體之前,開發人員應當更加主動地測試其代碼,並在新的漏洞出現後立即對代碼打補丁。

防禦和檢查SQL注入的手段

1.使用參數化的過濾性語句

要防禦SQL注入,用戶的輸入就絕對不能直接被嵌入到SQL語句中。恰恰相反,用戶的輸入必須進行過濾,或者使用參數化的語句。參數化的語句使用參數而不 是將用戶輸入嵌入到語句中。在多數情況中,SQL語句就得以修正。然後,用戶輸入就被限於一個參數。下面是一個使用Java和JDBC API例子:

PreparedStatement prep = conn.prepareStatement("SELECT * FROM USERS WHERE PASSWORD=?");

prep.setString(1, pwd);

總體上講,有兩種方法可以保證應用程序不易受到SQL注入的攻擊,一是使用代碼復查,二是強迫使用參數化語句的。強迫使用參數化的語句意味著嵌入用戶輸入的SQL語句在運行時將被拒絕。不過,目前支持這種特性的並不多。如H2 資料庫引擎就支持。

2.還要避免使用解釋程序,因為這正是黑客們藉以執行非法命令的手段。

3.防範SQL注入,還要避免出現一些詳細的錯誤消息,因為黑客們可以利用這些消息。要使用一種標準的輸入確認機制來驗證所有的輸入數據的長度、類型、語句、企業規則等。

4.使用專業的漏洞掃描工具。但防禦SQL注入攻擊也是不夠的。攻擊者們目前正在自動搜索攻擊目標並實施攻擊。其技術甚至可以輕易地被應用於其它的Web 架構中的漏洞。企業應當投資於一些專業的漏洞掃描工具,如大名鼎鼎的Acunetix的Web漏洞掃描程序等。一個完善的漏洞掃描程序不同於網路掃描程 序,它專門查找網站上的SQL注入式漏洞。最新的漏洞掃描程序可以查找最新發現的漏洞。

5.最後一點,企業要在Web應用程序開發過程的所有階段實施代碼的安全檢查。首先,要在部署Web應用之前實施安全測試,這種措施的意義比以前更大、更深遠。企業還應當在部署之後用漏洞掃描工具和站點監視工具對網站進行測試。

Web安全拉警報已經響起,安全形式異常嚴峻,企業絕對不應當草率從事。安全重於泰山!

㈤ sql注入攻擊怎麼解決

網路:

SQL注入攻擊是你需要擔心的事情,不管你用什麼web編程技術,再說所有的web框架都需要擔心這個的。你需要遵循幾條非常基本的規則:
1)在構造動態SQL語句時,一定要使用類安全(type-safe)的參數加碼機制。大多數的數據API,包括ADO和ADO. NET,有這樣的支持,允許你指定所提供的參數的確切類型(譬如,字元串,整數,日期等),可以保證這些參數被恰當地escaped/encoded了,來避免黑客利用它們。一定要從始到終地使用這些特性。
例如,在ADO. NET里對動態SQL,你可以象下面這樣重寫上述的語句,使之安全:
Dim SSN as String = Request.QueryString("SSN")
Dim cmd As new SqlCommand("SELECT au_lname,au_fname FROM authors WHERE au_id = @au_id")
Dim param = new SqlParameter("au_id",SqlDbType.VarChar)
param.Value = SSN
cmd.Parameters.Add(param)
這將防止有人試圖偷偷注入另外的SQL表達式(因為ADO. NET知道對au_id的字元串值進行加碼),以及避免其他數據問題(譬如不正確地轉換數值類型等)。注意,VS 2005內置的TableAdapter/DataSet設計器自動使用這個機制,ASP. NET 2.0數據源控制項也是如此。
一個常見的錯誤知覺(misperception)是,假如你使用了存儲過程或ORM,你就完全不受SQL注入攻擊之害了。這是不正確的,你還是需要確定在給存儲過程傳遞數據時你很謹慎,或在用ORM來定製一個查詢時,你的做法是安全的。
2) 在部署你的應用前,始終要做安全審評(security review)。建立一個正式的安全過程(formal security process),在每次你做更新時,對所有的編碼做審評。後面一點特別重要。很多次我聽說開發隊伍在正式上線(going live)前會做很詳細的安全審評,然後在幾周或幾個月之後他們做一些很小的更新時,他們會跳過安全審評這關,推說,「就是一個小小的更新,我們以後再做編碼審評好了」。請始終堅持做安全審評。
3) 千萬別把敏感性數據在資料庫里以明文存放。我個人的意見是,密碼應該總是在單向(one-way)hashed過後再存放,我甚至不喜歡將它們在加密後存放。在默認設置下,ASP. NET 2.0 Membership API 自動為你這么做,還同時實現了安全的SALT 隨機化行為(SALT randomization behavior)。如果你決定建立自己的成員資料庫,我建議你查看一下我們在這里發表的我們自己的Membership provider的源碼。同時也確定對你的資料庫里的信用卡和其他的私有數據進行了加密。這樣即使你的資料庫被人入侵(compromised)了的話,起碼你的客戶的私有數據不會被人利用。
4)確認你編寫了自動化的單元測試,來特別校驗你的數據訪問層和應用程序不受SQL注入攻擊。這么做是非常重要的,有助於捕捉住(catch)「就是一個小小的更新,所有不會有安全問題」的情形帶來的疏忽,來提供額外的安全層以避免偶然地引進壞的安全缺陷到你的應用里去。
5)鎖定你的資料庫的安全,只給訪問資料庫的web應用功能所需的最低的許可權。如果web應用不需要訪問某些表,那麼確認它沒有訪問這些表的許可權。如果web應用只需要只讀的許可權從你的account payables表來生成報表,那麼確認你禁止它對此表的 insert/update/delete 的許可權。
6)很多新手從網上下載SQL通用防注入系統的程序,在需要防範注入的頁面頭部用 來防止別人進行手動注入測試(。
可是如果通過SQL注入分析器就可輕松跳過防注入系統並自動分析其注入點。然後只需要幾分鍾,你的管理員賬號及密碼就會被分析出來。
7)對於注入分析器的防範,筆者通過實驗,發現了一種簡單有效的防範方法。首先我們要知道SQL注入分析器是如何工作的。在操作過程中,發現軟體並不是沖著「admin」管理員賬號去的,而是沖著許可權(如flag=1)去的。這樣一來,無論你的管理員賬號怎麼變都無法逃過檢測。
第三步:既然無法逃過檢測,那我們就做兩個賬號,一個是普通的管理員賬號,一個是防止注入的賬號,為什麼這么說呢?筆者想,如果找一個許可權最大的賬號製造假象,吸引軟體的檢測,而這個賬號里的內容是大於千字以上的中文字元,就會迫使軟體對這個賬號進行分析的時候進入全負荷狀態甚至資源耗盡而死機。下面我們就來修改資料庫吧。
⒈對表結構進行修改。將管理員的賬號欄位的數據類型進行修改,文本型改成最大欄位255(其實也夠了,如果還想做得再大點,可以選擇備注型),密碼的欄位也進行相同設置。
⒉對表進行修改。設置管理員許可權的賬號放在ID1,並輸入大量中文字元(最好大於100個字)。
⒊把真正的管理員密碼放在ID2後的任何一個位置(如放在ID549上)。
由於SQL注入攻擊針對的是應用開發過程中的編程不嚴密,因而對於絕大多數防火牆來說,這種攻擊是「合法」的。問題的解決只有依賴於完善編程。專門針對SQL注入攻擊的工具較少,Wpoison對於用asp,php進行的開發有一定幫助...。

㈥ sql注入攻擊與防禦

AppScan[5] 是IBM公司出的一款Web應用安全測試工具,
AppScan
採用黑盒測試的方式,可以掃描常見的web應用安全漏洞。其工作原理,首先是根據起始頁爬取站下所有可見的頁面,同時測試常見的管理後台;獲得所有頁面之後利用SQL注入原理進行測試是否存在注入點以及跨站腳本攻擊的可能;同時還會對cookie管理、會話周期等常見的web安全漏洞進行檢測。AppScan功能十分齊全,支持登錄功能並且擁有十分強大的報表。在掃描結果中,不僅能夠看到掃描的漏洞,還提供了詳盡的漏洞原理、修改建議、手動驗證等功能。AppScan的缺點在於,作為一款商業軟體,價格十分昂貴。

滲透測試工具溯雪
溯雪是一款國產軟體,主要的功能是進行表單破解。
溯雪
由於目前的應用多數採用B/S模式,登錄窗口也都採用表單提交的方式,使得基於傳統協議的暴力破解軟體沒有用武之地。針對此類應用,採用溯雪等基於表單的暴力破解軟體可以很好的進行弱口令掃描。
溯雪的工作原理是抽取目標網站中的表單元素,搜尋錯誤登錄時的錯誤標志,然後採用字典填充其值並不斷提交嘗試獲得正確的連接。

滲透測試工具Pangolin
Pangolin是一款SQL注入測試工具,能夠自動化的進行
Pangolin
注入漏洞的檢測,從檢測注入開始到最後控制目標系統都給出了測試步驟,是目前國內使用率最高的SQL注入測試軟體。支持的資料庫包括Access、DB2、Informix、Microsoft SQL Server 2000、Microsoft SQL Server 2005、Microsoft SQL Server 2008、Mysql、Oracle、PostgreSQL、Sqlite3、Sybase。