SQL注入

2022-06-21 23:39:20 字數 1158 閱讀 9592

將jdbc看作乙個函式,輸入sql,輸出資料:

- eg:select people from user where id=12

12是從表單獲取的,但是如果表單種填的不是12

而是 12;show database;

那麼最終的傳給jdbc的sql語句是

select people from user where id=12;show database; //就會暴露資料庫表名

獲得表名繼續利用sql注入,表單中填 12;select * from [表名]

select people from user where id=12;select * from [表名];//就會暴露所有資訊

這是利用了對輸入資料檢測不嚴格的問題:

所以解決方式有兩種:

- 1、對輸入的資料進行校驗(不推薦)

魔高一尺道高一丈,只能解決部分問題,萬一程式設計師疏漏,又會出問題

- 2、對jdbc進行優化(十分推薦)

jdbc三步驟:

1> 載入驅動

2> 建立連線

3> 建立陳述物件編譯sql

4> 執行獲取資料

要避免sql注入,很明顯,sql第3步開始參與,所以只能從第3步做文章:

就是將輸入的資料和sql查詢拆開

eg:select people from user where id=12

先利用陳述物件編譯select people from user where id=?

再將12傳給編譯好的語句,這樣,不管你輸入的是什麼資料都不會影響jdbc的執行,就能從根本上杜絕sql注入了

eg:

string sql = "select people from user where id=?"; //執行sql前會預編譯號該條語句

preparedstatement s = conn.preparestatement(sql);

s.setstring(12, id); //表單輸入的資料就不會參與編譯過程了

resultset rs=pstmt.executeupdate();

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