SQL注入

2021-08-21 14:19:57 字數 1587 閱讀 2065

定義:所謂sql注入,就是通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。

注意:我們永遠不要信任使用者的輸入,我們必須認定使用者輸入的資料都是不安全的,我們都需要對使用者輸入的資料進行過濾處理。

以下例項中,輸入的使用者名稱必須為字母、數字及下劃線的組合,且使用者名稱長度為 8 到 20 個字元之間:

if (preg_match("/^\w$/", $_get['username'], $matches))

else

讓我們看下在沒有過濾特殊字元時,出現的sql情況:

// 設定$name 中插入了我們不需要的sql語句

$name = "qadir'; delete

from users;";

mysqli_query($conn, "select * from users where name=''

");

以上的注入語句中,我們沒有對 na

me的變

量進行過濾,n

ame的

變數進行

過濾

,name 中插入了我們不需要的sql語句,將刪除 users 表中的所有資料。

防止sql注入

在指令碼語言,如perl和php你可以對使用者輸入的資料進行轉義從而來防止sql注入。

php的mysql擴充套件提供了mysqli_real_escape_string()函式來轉義特殊的輸入字元。

if (get_magic_quotes_gpc()) 

$name = mysqli_real_escape_string($conn, $name);

mysqli_query($conn, "select * from users where name=''");

like語句中的注入

like查詢時,如果使用者輸入的值有」「和」%」,則會出現這種情況:使用者本來只是想查詢」abcd「,查詢結果中卻有」abcd_」、」abcde」、」abcdf」等等;使用者要查詢」30%」(注:百分之三十)時也會出現問題。

在php指令碼中我們可以使用addcslashes()函式來處理以上情況,如下例項:

$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_");

//$sub == \%something\_

mysqli_query($conn, "select * from messages where subject like '%'");

addcslashes() 函式在指定的字元前新增反斜槓

語法格式:addcslashes(string,characters)

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...