|
雖然前面有許多文章討論了SQL注入,但今天所討論的內(nèi)容也許可幫助你檢查自己的服務(wù)器,并采取相應(yīng)防范措施。知彼知己,方可取勝。首先要清楚SQL注入攻擊有哪些種類。
觀察近來(lái)的一些安全事件及其后果,安全專家們已經(jīng)得到一個(gè)結(jié)論,這些威脅主要是通過(guò)SQL注入造成的。雖然前面有許多文章討論了SQL注入,但今天所討論的內(nèi)容也許可幫助你檢查自己的服務(wù)器,并采取相應(yīng)防范措施。
SQL注入攻擊的種類
知彼知己,方可取勝。首先要清楚SQL注入攻擊有哪些種類。
1.沒(méi)有正確過(guò)濾轉(zhuǎn)義字符
在用戶的輸入沒(méi)有為轉(zhuǎn)義字符過(guò)濾時(shí),就會(huì)發(fā)生這種形式的注入式攻擊,它會(huì)被傳遞給一個(gè)SQL語(yǔ)句。這樣就會(huì)導(dǎo)致應(yīng)用程序的終端用戶對(duì)數(shù)據(jù)庫(kù)上的語(yǔ)句實(shí)施操縱。比方說(shuō),下面的這行代碼就會(huì)演示這種漏洞:
statement := "SELECT * FROM users WHERE name = '" + userName + "';"
這種代碼的設(shè)計(jì)目的是將一個(gè)特定的用戶從其用戶表中取出,但是,如果用戶名被一個(gè)惡意的用戶用一種特定的方式偽造,這個(gè)語(yǔ)句所執(zhí)行的操作可能就不僅僅是代碼的作者所期望的那樣了。例如,將用戶名變量(即username)設(shè)置為:
a' or 't'='t,此時(shí)原始語(yǔ)句發(fā)生了變化:
SELECT * FROM users WHERE name = 'a' OR 't'='t';
如果這種代碼被用于一個(gè)認(rèn)證過(guò)程,那么這個(gè)例子就能夠強(qiáng)迫選擇一個(gè)合法的用戶名,因?yàn)橘x值't'='t永遠(yuǎn)是正確的。
在一些SQL服務(wù)器上,如在SQL Server中,任何一個(gè)SQL命令都可以通過(guò)這種方法被注入,包括執(zhí)行多個(gè)語(yǔ)句。下面語(yǔ)句中的username的值將會(huì)導(dǎo)致刪除“users”表,又可以從“data”表中選擇所有的數(shù)據(jù)(實(shí)際上就是透露了每一個(gè)用戶的信息)。
a';DROP TABLE users; SELECT * FROM data WHERE name LIKE '%
這就將最終的SQL語(yǔ)句變成下面這個(gè)樣子:
SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT *
FROM DATA WHERE name LIKE '%';
其它的SQL執(zhí)行不會(huì)將執(zhí)行同樣查詢中的多個(gè)命令作為一項(xiàng)安全措施。這會(huì)防止攻擊者注入完全獨(dú)立的查詢,不過(guò)卻不會(huì)阻止攻擊者修改查詢。
2.Incorrect type handling
如果一個(gè)用戶提供的字段并非一個(gè)強(qiáng)類型,或者沒(méi)有實(shí)施類型強(qiáng)制,就會(huì)發(fā)生這種形式的攻擊。當(dāng)在一個(gè)SQL語(yǔ)句中使用一個(gè)數(shù)字字段時(shí),如果程序員沒(méi)有檢查用戶輸入的合法性(是否為數(shù)字型)就會(huì)發(fā)生這種攻擊。例如:
statement := "SELECT * FROM data WHERE id = " + a_variable + ";"
從這個(gè)語(yǔ)句可以看出,作者希望a_variable是一個(gè)與“id”字段有關(guān)的數(shù)字。不過(guò),如果終端用戶選擇一個(gè)字符串,就繞過(guò)了對(duì)轉(zhuǎn)義字符的需要。例如,將a_variable設(shè)置為:1;DROP TABLE users,它會(huì)將“users”表從數(shù)據(jù)庫(kù)中刪除,SQL語(yǔ)句變成:SELECT * FROM DATA WHERE id = 1;DROP TABLE users;
3.數(shù)據(jù)庫(kù)服務(wù)器中的漏洞
有時(shí),數(shù)據(jù)庫(kù)服務(wù)器軟件中也存在著漏洞,如MYSQL服務(wù)器中mysql_real_escape_string()函數(shù)漏洞。這種漏洞允許一個(gè)攻擊者根據(jù)錯(cuò)誤的統(tǒng)一字符編碼執(zhí)行一次成功的SQL注入式攻擊。 本新聞共 2頁(yè),當(dāng)前在第 1頁(yè) 1 2 |
|
【收藏】【打印】【進(jìn)入論壇】 |
|
|
|
|
|
|
|