SQL注入原理及其預防

2021-08-16 18:30:46 字數 1271 閱讀 3076

0x00什麼是sql注入

首先你得知道什麼是sql,結構化查詢語言(structured query language)簡稱sql(發音:/ˈes kjuː ˈel/ "s-q-l"),是一種特殊目的的程式語言,是一種資料庫查詢和程式語言,用於訪問資料以及查詢、更新和管理關係資料庫系統;同時也是資料庫指令碼檔案的副檔名。而sql注入就是將惡意的sql命令輸入到後台資料庫中,可以通過web表單提交、輸入網域名稱或頁面請求的查詢字串進行注入。

0x01sql注入原理

web應用程式沒有對使用者輸入的語句執行合法性檢測,攻擊者可以在web應用程式中事先定義好的查詢語句中新增或構造另外的sql語句,進行非授權的查詢,從而導致資料洩露。出現sql的原因主要有以下幾點:

①不當的字元處理

②不安全的資料庫配置

③不合理的查詢處理

④不當的錯誤處理

0x02sql注入分類

1. 基於錯誤的sql注入;

2. 聯合查詢的注入;

3. 堆查詢注入;

4. sql盲注:(1)基於布林盲注;(2)基於時間的盲注;(3)基於報錯的盲注;

5. 基於如何輸入資料型別的sql注入:(1)字串;(2)數字或整數;

注:還有根據程度和順序的注入,一階注入和二階注入。一階注入就是指輸入的語句對web直接產生了影響,出現了結果。二階注入類似儲存型xss,是指輸入提交的語句,無法直接對web應用程式產生影響,通過其他的輔助間接的對web產生危害。

0x03sql注入預防

1. 最佳選擇就是使用安全的api,完全避免使用直譯器,或提供引數化介面的介面,或遷移到orm或實體框架。

2. 使用正確的「白名單」的具有恰當規範化的輸入驗證方法同樣有助於防止注入攻擊,但這不是乙個完整的防禦,因為許多應用程式在輸入中需要特殊字元。例如文字區域或移動應用程式的api。

3. 對於任何剩餘的動態查詢,可以使用該直譯器的特定轉義語法轉義特殊字元。

4. 在查詢中使用limit和其他sql控制項,以防止sql注入時大量地洩露記錄。

注意:當引數化時,儲存過程仍然可以引起sql注入,如果pl/sql或t-sql將查詢和資料連線在一起,或者執行帶有立即執行或exec()的惡意資料。

0x04小結

這裡只對sql的原理和防禦方法進行了簡單的概述,具體的注入技術還在研究當中。本人還是小白,需要學習的東西還有很多,有什麼錯誤的地方還請各位大佬多多指教。

sql注入原理 分類 預防

原理 sql注入是因為後台sql語句拼接了使用者輸入的惡意資料,而web應用沒有對輸入的資料合法性進行判斷和過濾。攻擊者可以通過構造不同sql語句來實現對資料庫的任意操控,例如進行增刪改查等操作。分類 一 可分為平台層注入,也就是由不安全的資料庫配置或者資料平台的漏洞所導致,例如mysql有些版本是...

sql注入預防

sql注入即是指web應用程式對使用者輸入資料的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程式中事先定義好的查詢語句的結尾上新增額外的sql語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙資料庫伺服器執行非授權的任意查詢,從而進一步得到相應的資料資訊。1.簡單又有效的方法 prepar...

sql注入預防

在我們登陸驗證時會發現sql注入的現象。1.sql注入發生原因 因為如果使用者在使用者名稱上輸入的是 or 1 1 時,我們得到的sql語句是select from shop user where username or 1 1 and password d41d8cd98f00b204e98009...