關鍵字:sql 介紹:
SQL是一種用于關系數據庫的結構化查詢語言。它分為許多種,但大多數都松散地基于美國國家標準化組織最新的標準SQL-92。典型的執行語句是query,它能夠收集比較有達標性的記錄并返回一個單一的結果集。SQL語言可以修改數據庫結構(數據定義語言)和操作數據庫內容(數據操作語言)。在這份文檔中,我們將特別討論SQLSERVER所使用的Transact-SQL語言。
當一個攻擊者能夠通過往query中插入一系列的sql語句來操作數據寫入到應用程序中去,我們管這種方法定義成SQL注入。
一個典型的SQL語句如下:
Select id,forename,surname from authors
這條語句將返回authors表中所有行的id,forename和surname列。這個結果可以被限制,例如:
Select id,forename,surname from authors where forename'john' and surname='smith'
需要著重指明的是字符串'john'和'smith'被單引號限制。明確的說,forename和surname字段是被用戶提供的輸入限制的,攻擊者可以通過輸入值來往這個查詢中注入一些SQL語句,
如下:
Forename:jo'hn
Surname:smith
查詢語句變為:
Select id,forename,surname from authors where forename='jo'hn' and surname='smith'
當數據庫試圖去執行這個查詢時,它將返回如下錯誤:
Server:Msg 170, Level 15, State 1, Line 1
Line 1:Incorrect syntax near 'hn'
造成這種結果的原因是插入了.作為定界符的單引號。數據庫嘗試去執行'hn',但是失敗。如果攻擊者提供特別的輸入如:
Forename:jo';drop table authors—
Surname:
結果是authors表被刪除,造成這種結果的原因我們稍后再講。
文章來源于領測軟件測試網 http://www.anti-gravitydesign.com/