$id引數左右有數字型(無)、單引號、雙引號、括號等方式組成閉合;
最為經典的單引號判斷法:在引數後面加上單引號,比如:
如果頁面返回錯誤,則存在 sql 注入。 原因是無論字元型還是整型都會因為單引號個數不匹配而報錯。
通常 sql 注入漏洞分為 2 種型別:
數字型
字元型
當輸入的參 x 為整型時,通常 123.php 中 sql 語句型別大致如下: select * from 《表名》 where id = x 這種型別可以使用經典的 and 1=1 和 and 1=2 來判斷:
url 位址中繼續輸入 http://***/abc.php?id= xand 1=2頁面執行錯誤,則說明此 sql 注入為數字型注入。
原因如下: 當輸入 and 1=1時,後台執行 sql 語句:
select * from 《表名》 where id = x and 1=1
沒有語法錯誤且邏輯判斷為正確,所以返回正常。
當輸入 and 1=2時,後台執行 sql 語句:
select * from 《表名》 where id = x and 1=2
沒有語法錯誤但是邏輯判斷為假,所以返回錯誤。 我們再使用假設法:如果這是字元型注入的話,我們輸入以上語句之後應該出現如下情況:
select * from 《表名》 where id = 'xand 1=1' select * from 《表名》 where id = 'xand 1=2'
查詢語句將 and 語句全部轉換為了字串,並沒有進行 and 的邏輯判斷,所以不會出現以上結果,故假設是不成立的。
當輸入的參 x 為字元型時,通常 123.php 中 sql 語句型別大致如下: select * from 《表名》 where id ='x'這種型別我們同樣可以使用and '1'='1和and '1'='2來判斷:
url 位址中繼續輸入 http://***/abc.php?id= x' and '1'='2頁面執行錯誤,則說明此 sql 注入為字元型注入。同理
SQL注入過濾單引號是否無解
sql注入攻擊能夠得逞,往往是因為前台頁面傳遞的引數含有非法字元,導致sql原有邏輯發生改變。如經典的登入驗證例子 假設資料庫中username admin,password admin123 public static void main string args throws exception ...
自動完成 SQL注入單引號
在做查詢自動完成 autocomplete 功能時,出現乙個小bug。如下圖所示 這個錯誤很明顯是sql語句語法錯誤引起的,我這裡後端用的是字串拼接方式生成sql語句,其中部分條件模糊查詢語句如下 sql string.format and name like or shortname like o...
SQL判斷是否存在
判斷資料庫是否存在 if exists select from master.sysdatabases where name n 庫名 print exists else print not exists 判斷要建立的表名是否存在 if exists select from dbo.sysobjec...