SQL注入

2022-07-12 07:39:06 字數 1762 閱讀 6669

什麼是sql注入?

sql注入是黑客攻擊資料庫的一種常用方法,其實就是通過把sql命令插入到web表單或頁面請求的查詢字串中提交,最終達到欺騙伺服器執行惡意的sql命令,來達到攻擊的目的。

sql注入是怎麼產生的?

web開發人員無法保證所有的輸入都已經過濾

攻擊者利用傳送給sql伺服器的輸入引數構造可執行的sql**(可加入到get請求、post請求、http頭資訊、cookie中)

資料庫未做相應的安全配置

sql注入可以分為平台層注入和**注入。前者是由不安全的資料庫配置或平台漏洞所致。或者是程式設計師對輸入未進行細緻過濾產生

如何進行sql注入?

在url上新增引數請求查詢:

以上是通過url查詢id為1的資料,但如果我們在後面傳參這樣寫:' or 1=1

那麼執行的查詢語句就是where xx='1' or 1=1,這樣查詢的就是全部的資料,所以這就存在sql注入的問題

第一種:'#':'#'後所有的字串都會被當成注釋來處理

登入時的免密登入在傳參的時候將注釋符號#傳入,注釋後面密碼的查詢和驗證,這樣就可以只通過使用者名稱免密登入

使用者名稱:' or 1=1# 密碼:111111

這樣查詢語句執行的就是:where username='' or 1=1# and password='111111',直接注釋掉密碼的驗證

第二種:'-- ' (--後面有個空格):'-- '後面的字串都會被當成注釋來處理

使用者名稱輸入:user'-- (注意--後面有個空格,單引號閉合user左邊的單引號),密碼隨意輸入,如:111,然後點選提交按鈕。

等價於sql語句select * from user where username = 'user'-- 'and password = '111','-- '後面都被注釋掉了,相當於select * from user where username = 'user'

傳入的引數為 or 1=(drop xx from xx)等,可以對資料表進行刪除操作,所以sql注入的安全性問題很重要,sql注入是在保證查詢where語句恆真的情況下可以對資料表做任意操作

而為何一些表單提交和輸入文字框中的請求可以sql注入呢,就是後端沒有對使用者輸入的資料進行過濾驗證。所以判斷是否可以進行sql注入是我們即將進行sql注入攻擊的第二步。

第一步是確定我們要進行sql注入的地方。

第二步嘗試性地輸入乙個使wehre查詢語句恆真的語句,通過返回的錯誤的提示可以知道該輸入域是否對輸入的字串進行過濾

第三步可以通過猜測表名,列名等方法可以測試

如何預防sql注入?

對於整數引數,加判斷條件:不能為空、引數型別必須為數字

對於字串引數,可以使用正規表示式進行過濾:如:必須為[0-9a-za-z]範圍內的字串

在username這個變數前進行轉義,對'、"、\等特殊字元進行轉義,如:php中的addslashes()函式對username引數進行轉義

把sql語句的模板(變數採用佔位符進行佔位)傳送給mysql伺服器,mysql伺服器對sql語句的模板進行編譯,編譯之後根據語句的優化分析對相應的索引進行優化,在最終繫結引數時把相應的引數傳送給mysql伺服器,直接進行執行,節省了sql查詢時間,以及mysql伺服器的資源,達到一次編譯、多次執行的目的,除此之外,還可以防止sql注入。具體是怎樣防止sql注入的呢?實際上當將繫結的引數傳到mysql伺服器,mysql伺服器對引數進行編譯,即填充到相應的佔位符的過程中,做了轉義操作。

SQL注入(三) sql注入 bugku

原理 mysql 在使用 gbk 編碼的時候,會認為兩個字元為乙個漢字,例如 aa 5c 就是乙個 漢字 前乙個 ascii碼大於 128 才能到漢字的範圍 我們在過濾 的時候,往往利用的思 路是將 轉換為 換的函式或者思路會在每一關遇到的時候介紹 因此我們在此想辦法將 前面新增的 除掉,一般有兩種...

SQL注入 報錯注入

乙個帶get引數的 並且不從資料庫返回資料,但存在報錯資訊 檢視字段情況 報錯注入語句格式 and 1 2 union select1,2,3 from select count concat floor rand 0 2 sql語句 a from information schema.tables...

SQL注入 報錯注入

sql注入基礎 盲注 用於注入結果無回顯但錯誤資訊有輸出的情況 floor函式 返回小於等於某值的整數,例如floor 1 則返回1,floor 1.9 也返回1 rand函式 生成隨機數.可指定seed,指定後每次生成的數都一樣即偽隨機,不指定seed則每次生成的隨機數都不一樣.通過floor和r...