SQL注入基礎-易錯問題彙總mysql
1.sql注入本質是什麼sql
把用戶輸入當作代碼執行數據庫
2.sql注入的條件函數
用戶可控輸入和本來程序要執行代碼,拼接用戶輸入且看成SQL語句去執行編碼
3.order by的做用及含義spa
order by 用於判斷顯示位,order by 原有的做用是對字段進行一個排序,在sql注入中用order by 來判斷排序,order by 1就是對一個字段進行排序,若是一共四個字段,你order by 5 數據庫不知道怎麼排序,因而乎就錯誤了無返回值orm
4.union select如何發揮做用排序
union爲聯合查詢,a聯合b進行了查詢,爲查詢了前面的sql語句(原有的)後再進行後面的sq查詢(咱們添加的),但兩張表聯合查詢的字段數必須相同。字符串
5.輸出位是什麼源碼
SQL查詢出來的數據不必定所有會輸出,頁面上只會輸出幾個字段的信息,那幾個會輸出的字段就是輸出位
6.information_schema是什麼
information_schema是mysql的系統自帶表,用於查詢數據,在mysql5.0以上版本中存在
7.加單引號和加 and 1=2有什麼區別
有區別,單引號是爲了閉合語句,而and 1=2是爲了讓union前面的語句無查詢結果無輸出,而後直接輸出拼接進去union後面的那個語句的查詢結果
8.and 是什麼意思
and 爲和的意思,一個語句中,當前一個正確,後一個錯誤時,若是是and鏈接整個語句返回是False
9.or是什麼意思
Or 爲和的意思,一個語句中,當前一個正確,後一個錯誤時,若是是or鏈接整個語句返回是True
10.and 和 or 選擇使用有什麼講究?
And 語句執行時,若是and 前的語句返回False,那麼and後面的語句根本不執行
11.除了單引號外還有其餘的符號能夠閉合嗎?
實際上仍是要看源碼,常見的是單引號和雙引號還有括號
12.limit的做用
limit 在注入中用於排序而後輸出,limit a,b a表明了從哪一個位置(從0開始) b表明從那位開始顯示幾條數據
13.能夠查訊多個字段內容嗎
能夠,能夠使用語句Group_concat()函數進行輸出
14.%23有什麼做用
%23編碼爲#,用於註釋後面的語句,防止SQL注入點後本來的SQL語句對SQL注入進行干擾
15.報錯注入的原理
利用sql注入拼接sql語句,將報錯信息輸出時同時將咱們想要的信息輸出
16.閉合是什麼
在sql查詢中,代碼比較嚴謹,括號和引號都得成雙成對,引號內的默認是字符串不會看成SQL語句執行,因此必須閉合而後才能注入,固然有些SQL語句直接拼接,也就不用什麼閉合了
17.SQL注入有數據庫限制嗎?
沒有,常見的數據庫均可以
18.SQL注入有動態腳本語言限制嗎?
沒有限制
19.SQL注入若是沒系統自帶表怎麼辦
那就慘了,只能經過猜,不斷的嘗試,通常而言數據庫的表也不會亂起名字,畢竟是團隊協做的東西
20.系統自帶庫管理員不會修改嗎?
通常而言並不會
21.union all 和 union 區別
若是輸出的數據有相同的,Union只會輸出一次,而union all都會輸出
22.爲何用and 1=1正常 and 1=2報錯來判斷是否存在SQL注入
由於若是存在SQL注入,那麼and就是和的意思,1=1是一個恆等式,而後由於本來可以查出數據,那麼兩個真就是True,可是1=2確定是不可能的,這裏就會返回一個False,而後由於和必須兩個真才返回True,因此這裏拼接就不成立返回False.