先新建mydb.mdf,表myuser:
測試頁面:
一、利用報錯獲取資訊
操作:按姓名精確查詢,在輸入框輸入:小衛' and 1=db_name()/0 and '1'='1
執行語句:select * from myuser where uname='小衛' and 1=db_name()/0 and '1'='1
結果:得到資料庫名「mydb.mdf」
操作:按姓名精確查詢,在輸入框輸入:小衛' and 1=(select top 1 name from sys.tables)/0 and '1'='1
執行語句:select * from myuser where uname='小衛' and 1=(select top 1 name from sys.tables)/0 and '1'='1
結果:得到表名「myuser」
修復建議:把接收引數的乙個單引號變成兩個單引號
執行語句:
select * from myuser where uname='小衛'' and 1=db_name()/0 and ''1''=''1'
select * from myuser where uname='小衛'' and 1=(select top 1 name from sys.tables)/0 and ''1''=''1'
結果:無報錯資訊
二、數字型注入
操作:按編號精確搜尋,在輸入框輸入:2;delete from myuser--
執行語句:select * from myuser where uid=2;delete from myuser--
結果:myuser 表資料被刪除
修復建議:過濾關鍵字 select、drop、delete 等
三、模糊查詢
目的:搜尋出姓名帶「%」的客戶
操作:按姓名模糊查詢,在輸入框輸入:%
執行語句:select * from myuser where uname like '%%%'
結果:全部的客戶都被搜尋出來了
修復建議:加中括號轉義百分號:[%]
執行語句:select * from myuser where uname like '%[%]%'
結果:只有姓名帶「%」的客戶被搜尋出來
四、字元型注入
操作:按姓名模糊查詢,在輸入框輸入:小程' or '1'='1
執行語句:select * from myuser where '小程' or '1'='1'
結果:'1'='1 處可注入
修復建議:把接收引數的乙個單引號變成兩個單引號
五、order by 型注入
操作:排序規則選擇「按年齡降序」,把 value="uage desc" 改為 value="uage desc,case when 1=1 then uid else uage end"
執行語句:select * from myuser order by uage desc;delete from myuser
結果:1=1 處可注入
修復建議:採用陣列對映的方式,如1代表按年齡降序,2代表按年齡公升序
Web 安全漏洞之 SQL 注入
有人的地方就有江湖,有資料庫存在的地方就可能存在 sql 注入漏洞。在所有漏洞型別中,sql 注入可是說是危害最大最受大家關注的漏洞。簡單說來,sql 注入是通過在使用者可控引數中注入sql語法,破壞原有sql結構,達到編寫程式時意料之外結果的攻擊行為。還是以 thinkjs 為例,假設我們寫了如下...
SQL注入漏洞
sql注入漏洞曾經是web應用程式的噩夢,cms bbs blog無一不曾受其害。sql注入的原理 以往在web應用程式訪問資料庫時一般是採取拼接字串的形式,比如登入的時候就是根據使用者名稱和密碼去查詢 string sql select top 1 from user where username...
SQL注入漏洞
sql注入,就是通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令,比如先前的很多影視 洩露vip會員密碼大多就是通過web表單遞交查詢字元暴出的,這類表單特別容易受到sql注入式攻擊 sql注入的發生 當應用程式使用輸入內容來構造動態sq...