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

來源:互聯網
上載者:User
攻擊|教程 因為目前SQL注入是非常熱門而且技術門檻較低的攻擊手段,並且非常實用,輕則可以拿到網站的一些帳號,比如拿到某個電影網站的黃金會員的帳號;重則利用其網站樓多入侵整個伺服器等等。

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

一,SQL縱覽

SQL(Structured Query Language)語言是一種結構化查詢語言 (SQL)。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中添加資料。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。