1. 程式人生 > >SQL入門——摘自SQL注入攻擊與防禦

SQL入門——摘自SQL注入攻擊與防禦

SQL查詢由一條或多條SQL語句構成,這些語句是資料庫伺服器能夠有效執行的指令。操作資料庫或執行SQL注入時最長碰到的SQL語句是SELECT,INSERT,UPDATE,CRATE,UNION SELECT和DELETE.1.SELECT語句SQL命令以分號“;”結束執行,不區分大小寫
SELECT * FROM tblUsers;   返回tbusers表中的所有資料。星號(*)是個萬用字元,它指示資料庫伺服器返回所有資料。
SELECT username FROM tblUsers;   返回tbusers表中所有行為username的列:
SELECT * FROM tblUsers WHERE username = 'admin' AND password = 'letmein'; 返回所有username列的值為admin且password列的值為letmein的行。
SELECT * INTO hackerTable FROM
tblUsers;   複製tblusers的所有資料到hackerTable上
2.UNION運算子可以使用UNION運算子來合併兩條或多條SELECT語句的結果集。參與UNION運算的所有SELECT語句必須返回相同的列數,並且對應列的資料型別必須相互相容。
查詢分別來自tblUsers表和tblAdmins表的username列和password列合併到一起:
SELECT username,password FROM tblUsers UNION SELECT username,password FROM tblAdmins;
UNION SELECT 會自動比較每條SELECT返回的值並只返回不重複的值。全部返回:
SELECT username,password FROM tblUsers UNION ALL SELECT username,password FROM tblAdmins;
3.INSERT語句
INSERT INTO tblUsers VALUES(1,'Jhon Smith',3);   向tblUsers表中插入資料(1,’John Smith‘,3)
INSERT INTO tblUsers(id,username,password) VALUES(1,'Jhon Smith',3); 定向列插入資料。有效防止數值插入錯誤列中。
4.UPDATE語句UPDATE用於修改資料庫表中已經存在的資料。
 update shoppinglist3  set wupin=0 where goods=2; 修改shoppinglist3表中goods列值是2的wupin列值為0.
注:UPDATE語句都應包含一個WHERE子句,應指出應該更新哪些行。如果省略了WHERE子句,那麼所有行都會受到影響。5.DELETE語句DELETE語句用於從表中刪除行。
DELETE shoppinglist3 WHERE goods = 2; 刪除shopping list3表中goods為2的行。
注:DELETE語句後都應包含WHERE子句,應指出刪除哪些行。如果省略where語句,那麼所有行都會被刪除。Tips:危險的SQL注入檢測SQL注入漏洞最常見的一種方法是插入條件子句並觀察應用行為中的差異。
SELECT story FROM news WHERE id=19
SELECT story FROM news WHERE id=19 OR 1=1
SELECT story FROM news WHERE id=19 OR 1=2
經過修改的第二條查詢返回資料庫中所有的story列,因為1始終等於1.從攻擊的角度來看,易受攻擊的應用會針對修改後的查詢做出不同的響應,這表明存在SQL注入漏洞。6.DROP語句DROP語句用於刪除資料庫物件,比如表、檢視、索引。
DROP TABLE shoppinglist2; 刪除shoppinglist2表
7.CREATE TABLE語句
CREATE TABLE shoppinglist(item int,name varchar(100)); 建立一個shoppinglist表,包含(item,name)兩個列。
CREATE TABLE shoppinglist2 as SELECT * FROM orders; 建立一個表由orders表填充
8.ALTER TABLE語句ALTER TABLE語句用於新增、刪除、修改現有表格中的列。
 alter table shoppinglist2 add tips varchar(100);   向shoppinglist2表新增tips列
 alter table shoppinglist2 drop column tips; 刪除shoppinglist2表中tips列
 alter table shoppinglist2 alter column cost varchar(50); 修改cost列資料型別(未實現,不清楚原因?)
9.GROUP BY語句
SELECT CUSTOMER,SUM(COST) FROM ORDERS WHERE CUSTOMER='A' GROUP BY CUSTOMER; 對customer A的所有消費求和。
10.ORDER BY 子句ORDER BY 子句用於對SELECT 語句的查詢結果按特定列進行排序,它接受一個列名或數字做強制引數。新增ASC或DESC關鍵字將結果分別按升序或降序排列。
SELECT product FROM shoppinglist2 ORDER BY ASC;對product列進行升序排列
11.限制結果集執行SQL注入攻擊時,通常需要限制注入查詢(例如,通過錯誤資訊提取資料)返回的行數。各資料庫平臺略有不同,以MySQL為例。
SELECT * FROM shoppinglist LIMIT 1,1;選擇第一行
SELECT * FROM shoppinglist LIMIT 5,1;選擇第五行