SQL注入問題總結

2022-05-07 17:03:12 字數 1039 閱讀 3159

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