sql注入就是將原本的sql語句的邏輯結構改變,使得sql語句的執行結果和原本開發者的意圖不一樣;
方法:在表單中將命令當作使用者輸入提交給程式;
這裡我們根據使用者登入頁面
預先建立乙個表:create table user_table(id int primary key,
username varchar(30),
password varchar(30)
);
insert into user_table values(1,'xiazdong-1','12345');一般查詢資料庫的**如下:insert into user_table values(2,'xiazdong-2','12345');
public class demo01但是這裡username=xiazdong,password=12345,}}
因此此處的sql語句為:
select id from user_table where username='xiazdong' and password='12345';如果我們把username和password的值變為:
username=' or 1=1 --
password=x
會變成乙個很可怕的情況:將把資料庫中所有使用者都列出來,為什麼呢?
因為sql語句現在為:
select id from user_table where username='' or 1=1 -- ' and password='12345';因為--表示sql注釋,因此後面語句忽略;
因為1=1恆成立,因此 username='' or 1=1 恆成立,因此sql語句等同於:
select id from user_table;很奇妙吧....
其實解決方法很簡單,就是使用preparedstatement即可;
最後引入一張sql注入的:
Sql 注入問題總結
所謂sql注入,就是通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。示例一 惡意sql 命令 設定 name 中插入了我們不需要的sql語句 name qadir delete from users mysql query select...
SQL注入總結
在大部分語言中都一樣是注釋。這個之中的語句是不被執行的。但mysql中 為了保持相容,比如從mysqldump 匯出的sql語句能被其它資料庫直接使用,它把一些特有的僅在mysql上的語句放在 中,這樣這些語句如果在其他資料庫中是不會被執行,但在mysql中它會執行。僅當mysql的版本等於或高於指...
sql注入總結
第一天 url 統一資源定位符 協議 主機號 目錄 注釋符 20 代表空格 order by 15 閉合條件為 猜測列數 union all select 1,2,3 猜測顯示位 select schema name from information schema.schemata 查庫名 sele...