您的位置:首頁 > 數據庫 > MSSQL

初級教程之SQL Injection(SQL注入攻擊)

日期:2006-08-18 15:23:59 點擊: 來自: 作者:
因為目前SQL注入是非常熱門而且技術門檻較低的攻擊手段,并且非常實用,輕則可以拿到網站的一些帳號,比如拿到某個電影網站的黃金會員的帳號;重則利用其網站樓多入侵整個服務器等等。

這里打算作為一個專題講解SQL及其注入。其中對于SQL不太明白的地方希望大家自己查資料。這個帖子將長期更新。。。

一,SQL縱覽

SQL(Structured Query Language)語言是一種結構化查詢語言。SQL語言中完成核心功能的共有9個關鍵詞:SELECT(數據查詢)、CREAT、DROP、ALTER(數據定義)、INSERT、UPDATA、DELETE(數據操縱)、GRANT、REVOKE(數據控制)。

1,數據定義部分
(1)創建基本表
creat table Employee (
Eno char(6) not null unique,
Ename char(20) unique
Esex char(2)
Eage int
Edept char(10)
Espe char(20)
)
該語句創建了一個名為Employee的數據表,共有六列,分別為字符型(長度為6,非空,唯一)的雇員號Eno,字符型(長度為20,唯一)的雇員號姓名Ename,字符型(長度為2)的雇員性別,整型的雇員年齡,字符型(長度為10)的雇員部門,字符型(長度為20)的雇員特長.

(2)刪除基本表
DROP TABLE Employee

(3)更改基本表
ALTER TABLE Employee ADD Esalary CHAR(5)
在雇員表中加入一列,字符型(長度為5)的雇員薪水.
ALTER TABLE Wmployee DROP UNIQUE(Ename);
去掉雇員表中雇員姓名的唯一屬性.
ALTER TABLE Employee MODIFY Esex CHAR(1);
把雇員表中的性別列改為一位字符型.

2,數據查詢部分

這是SQL語句中最靈活,功能最強的部分.
(1)基本查詢語句
SELECT Eno,Ename,Esex FROM Employee
查詢Employee表中的Eno,Ename,Esex三列
SELECT * FROM Employee
查詢Employee表中的所有列.
SELECT DISTINCT Eno FROM Employee;
查詢Employee表中的Eno列,并去除重復行.

(2)條件(WHERE)查詢語句
插敘條件的連接詞如下:NOT,=,>,<,>=,<=,!=,<>,!>,!<,BETWEEN AND,NOT BETWEEN AND(確定范圍),LIKE,NOT LIKE(字符匹配),IS NULL,IS NOT NULL(空值),AND,OR(多條件連接).

ⅰ 比較
SELECT Eno FROM Employee WHERE Eage <=25
列出表中年齡小于25的雇員號
ⅱ 確定范圍
SELECT Eno,Ename FROM Employee
WHERE Eage [NOT] BETWEEN 20 AND 30
列出表中年齡(不)在20到30的雇員號和姓名
ⅲ 確定集合
SELECT Eno,Ename FROM Employee
WHERE Edept [NOT] IN (‘SD',’HD’)
列出表中(不)是軟硬件開發部的雇員號和姓名
ⅳ 字符匹配
LIKE的用法如下
[NOT] LIKE ‘<匹配模式>’[ESCAPE ‘<換碼符>’]
通配符號有%和_兩種。
%:匹配任意長度的字符串(長度可以為0)。A%b可與ab,adfb等匹配。
_:匹配單個任意字符。a_b可與a#b,a@b等匹配。
如果有ESCAPE,則跟在換碼符號后的%或者_不再是通配符號,只是正常的%或_。
例如:
SELECT * FROM Employee WHERE Ename LIKE ‘劉%’
查找表中姓劉雇員的信息
SELECT * FROM Employee Where Ename LIKE ‘劉_ _’
查找表中姓名為劉某(兩個字)的雇員的信息。
SELECT * FROM Employee WHERE Espe LIKE ‘DB%t_‘ESCAPE’’
查找表中特長項為DB_開始,倒數第二個字符為t的雇員的信息。

Ⅴ 空值SELECT * FROM Employee WHEREE Espe IS [NOT] NULL
查找表中特長項(不)為空的雇員信息。

Ⅵ 多條件連接
SELECT Ename FROM Employee WHERE Edept ='SD' AND Eage <=30;
列出表中軟件開發部門30及30歲以下雇員姓名。

(3)結果排序
對查詢結果進行排序用ORDERBY,ASC(默認)為升序,DESC為降序
SELECT * FROM Employee ORDER BY Edept,Eage DESC

(4)結果分組
對查詢結果的分組一般要用到SQL的集函數,因此先介紹集函數。
SQL語言的集函數主要有COUNT(統計總數),SUM(求和),AVG(求均值),MAX(最大值),MIN(最小值)。
SELECT MAX(Eage) FROM Employee WHERE Edept='SD'
列出軟件開發部年紀最大雇員的姓名。
SELECT Edept FROM Employee GROUP BY Edept HAVING Count(*)>10
統計各部門的雇員數,只顯示雇員數大于10的部門。
SELECT Edept,COUNT(Eno) FROM Employee GROUP BY Edept
統計各部門雇員數,按部門分組列出各部門的雇員數。

(5)連接查詢
連接查詢是查詢涉及多個數據表,FROM后連接多個表的情況。
假如我們要統計各個項目參加人的雇員號和姓名,涉及的表Eproject結構如下:
Eproject (Eno CHAR(6),Pno CHAR(6),TimeBgnTIME,
TimeEnd TIME,Remark CHAR(50))
相應的查詢語句為:
SELECT Eproject.Pno,Employee.Eno,Ename
FROM Employee,Eproject
WHERE Employee.Eno=Eproject.Eno
ORDER BY Eproject.Pno;
列出參加各項目的雇員號和姓名,并按照項目號升序排列。

(6)集合查詢
集合查詢指的是多個SELECT查詢結果間進行的集合操作。主要有UNION(并操作),INTERSECT(交操作),MINUS(差操作),其中標準SQL中沒有提供交操作和差操作,但他們可以使用聯合查詢實現。
假如我們要查詢硬件開發部年齡不大于25歲的雇員,可以結合查詢實現如下:
SELECT * FROM Employee WHERE Edept='HD' UNION SELECT * FROM Employee WHERE Eage<=25

3,數據更新部分
SQL中的數據更新語句有INSERT,UPDATE和DELETE三種,用法如下:

(1)插入數據
INSERT INTO Employee
valueS ('13253','王二','男','23','SD','DB_Project')
向雇員表中插入一條完整的數據
INSERT INTO Employee (Eno,Ename)
valueS ('13253','王二');
向表中插入一條數據,只包含雇員號和姓名,其他列為空值。
注意:以上情況,屬性為非空的列一定不能為空值。

(2)修改數據
UPDATE Employee SET Eage=24 WHERE Eno='13253'
將表中13253號雇員年齡改為24歲

(3)刪除數據
DELETE FROM Employee WHERE Eno='13253'

4,數據控制部分

(1)用戶授權
SQL用戶授權使用GRANT關鍵詞,它的用法如下:
GRANT SELECT ON TABLE Employee TO usr1;
允許用戶usr1查詢表Employee
GRANT ALL PRIVILEGES ON TABLE Employee TO usr2;
允許用戶usr2對表Employee的任何操作

(2)收回權限
SQL中收回用戶權限使用REVOKE關鍵詞
REVOKE UPDATE(Eno) ON TABLE Employee FROM usr3;]
收回usr3更新表Employee中Eno列的權利
REVOKE ON TABLE Employee FROM PUBLIC
不允許所有用戶在表Employee中添加數據。

More..素材圖片 Picture Navigation
相關鏈接 Correlation Link
MSSQL熱門 Class Hot
MSSQL推薦 Class Commend
版權所有:中國網站資源 2005- 未經授權禁止復制或建立鏡像 This Site Tech:XHTML+DIV+CSS+Javascript
CopyRight ® 2005- www.patiodelivery.com online services. all rights reserved. ICP06016627
Optimized to 1024x768 to Firefox,Netscape,Opera,MS-IE6+.
99视频30精品视频在线观看