欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL注入攻擊的種類(lèi)和防范手段

  發(fā)布時(shí)間:2010-07-08 01:53:24   作者:佚名   我要評(píng)論
觀察近來(lái)的一些安全事件及其后果,安全專(zhuān)家們已經(jīng)得到一個(gè)結(jié)論,這些威脅主要是通過(guò)SQL注入造成的。雖然前面有許多文章討論了SQL注入,但今天所討論的內(nèi)容也許可幫助你檢查自己的服務(wù)器,并采取相應(yīng)防范措施。
SQL注入攻擊的種類(lèi)

  知彼知己,方可取勝。首先要清楚SQL注入攻擊有哪些種類(lèi)。

  1.沒(méi)有正確過(guò)濾轉(zhuǎn)義字符

  在用戶(hù)的輸入沒(méi)有為轉(zhuǎn)義字符過(guò)濾時(shí),就會(huì)發(fā)生這種形式的注入式攻擊,它會(huì)被傳遞給一個(gè)SQL語(yǔ)句。這樣就會(huì)導(dǎo)致應(yīng)用程序的終端用戶(hù)對(duì)數(shù)據(jù)庫(kù)上的語(yǔ)句實(shí)施操縱。比方說(shuō),下面的這行代碼就會(huì)演示這種漏洞:

  statement := "SELECT * FROM users WHERE name = '" + userName + "';"

  這種代碼的設(shè)計(jì)目的是將一個(gè)特定的用戶(hù)從其用戶(hù)表中取出,但是,如果用戶(hù)名被一個(gè)惡意的用戶(hù)用一種特定的方式偽造,這個(gè)語(yǔ)句所執(zhí)行的操作可能就不僅僅是代碼的作者所期望的那樣了。例如,將用戶(hù)名變量(即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è)合法的用戶(hù)名,因?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è)用戶(hù)的信息)。

  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í)行同樣查詢(xún)中的多個(gè)命令作為一項(xiàng)安全措施。這會(huì)防止攻擊者注入完全獨(dú)立的查詢(xún),不過(guò)卻不會(huì)阻止攻擊者修改查詢(xún)。

  2.Incorrect type handling

  如果一個(gè)用戶(hù)提供的字段并非一個(gè)強(qiáng)類(lèi)型,或者沒(méi)有實(shí)施類(lèi)型強(qiáng)制,就會(huì)發(fā)生這種形式的攻擊。當(dāng)在一個(gè)SQL語(yǔ)句中使用一個(gè)數(shù)字字段時(shí),如果程序員沒(méi)有檢查用戶(hù)輸入的合法性(是否為數(shù)字型)就會(huì)發(fā)生這種攻擊。例如:

  statement := "SELECT * FROM data WHERE id = " + a_variable + ";"

  從這個(gè)語(yǔ)句可以看出,作者希望a_variable是一個(gè)與“id”字段有關(guān)的數(shù)字。不過(guò),如果終端用戶(hù)選擇一個(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注入式攻擊。

  4.盲目SQL注入式攻擊

  當(dāng)一個(gè)Web應(yīng)用程序易于遭受攻擊而其結(jié)果對(duì)攻擊者卻不見(jiàn)時(shí),就會(huì)發(fā)生所謂的盲目SQL注入式攻擊。有漏洞的網(wǎng)頁(yè)可能并不會(huì)顯示數(shù)據(jù),而是根據(jù)注入到合法語(yǔ)句中的邏輯語(yǔ)句的結(jié)果顯示不同的內(nèi)容。這種攻擊相當(dāng)耗時(shí),因?yàn)楸仨殲槊恳粋€(gè)獲得的字節(jié)而精心構(gòu)造一個(gè)新的語(yǔ)句。但是一旦漏洞的位置和目標(biāo)信息的位置被確立以后,一種稱(chēng)為Absinthe的工具就可以使這種攻擊自動(dòng)化。

  5.條件響應(yīng)

  注意,有一種SQL注入迫使數(shù)據(jù)庫(kù)在一個(gè)普通的應(yīng)用程序屏幕上計(jì)算一個(gè)邏輯語(yǔ)句的值:

  SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=1

  這會(huì)導(dǎo)致一個(gè)標(biāo)準(zhǔn)的面面,而語(yǔ)句

  SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=2在頁(yè)面易于受到SQL注入式攻擊時(shí),它有可能給出一個(gè)不同的結(jié)果。如此這般的一次注入將會(huì)證明盲目的SQL注入是可能的,它會(huì)使攻擊者根據(jù)另外一個(gè)表中的某字段內(nèi)容設(shè)計(jì)可以評(píng)判真?zhèn)蔚恼Z(yǔ)句。

  6.條件性差錯(cuò)

  如果WHERE語(yǔ)句為真,這種類(lèi)型的盲目SQL注入會(huì)迫使數(shù)據(jù)庫(kù)評(píng)判一個(gè)引起錯(cuò)誤的語(yǔ)句,從而導(dǎo)致一個(gè)SQL錯(cuò)誤。例如:

  SELECT 1/0 FROM users WHERE username='Ralph'。顯然,如果用戶(hù)Ralph存在的話(huà),被零除將導(dǎo)致錯(cuò)誤。

  7.時(shí)間延誤

  時(shí)間延誤是一種盲目的SQL注入,根據(jù)所注入的邏輯,它可以導(dǎo)致SQL引擎執(zhí)行一個(gè)長(zhǎng)隊(duì)列或者是一個(gè)時(shí)間延誤語(yǔ)句。攻擊者可以衡量頁(yè)面加載的時(shí)間,從而決定所注入的語(yǔ)句是否為真。

  以上僅是對(duì)SQL攻擊的粗略分類(lèi)。但從技術(shù)上講,如今的SQL注入攻擊者們?cè)谌绾握页鲇新┒吹木W(wǎng)站方面更加聰明,也更加全面了。出現(xiàn)了一些新型的SQL攻擊手段。黑客們可以使用各種工具來(lái)加速漏洞的利用過(guò)程。我們不妨看看the Asprox Trojan這種木馬,它主要通過(guò)一個(gè)發(fā)布郵件的僵尸網(wǎng)絡(luò)來(lái)傳播,其整個(gè)工作過(guò)程可以這樣描述:首先,通過(guò)受到控制的主機(jī)發(fā)送的垃圾郵件將此木馬安裝到電腦上,然后,受到此木馬感染的電腦會(huì)下載一段二進(jìn)制代碼,在其啟動(dòng)時(shí),它會(huì)使用搜索引擎搜索用微軟的ASP技術(shù)建立表單的、有漏洞的網(wǎng)站。搜索的結(jié)果就成為SQL注入攻擊的靶子清單。接著,這個(gè)木馬會(huì)向這些站點(diǎn)發(fā)動(dòng)SQL注入式攻擊,使有些網(wǎng)站受到控制、破壞。訪問(wèn)這些受到控制和破壞的網(wǎng)站的用戶(hù)將會(huì)受到欺騙,從另外一個(gè)站點(diǎn)下載一段惡意的JavaScript代碼。最后,這段代碼將用戶(hù)指引到第三個(gè)站點(diǎn),這里有更多的惡意軟件,如竊取口令的木馬。

  以前,我們經(jīng)常警告或建議Web應(yīng)用程序的程序員們對(duì)其代碼進(jìn)行測(cè)試并打補(bǔ)丁,雖然SQL注入漏洞被發(fā)現(xiàn)和利用的機(jī)率并不太高。但近來(lái)攻擊者們?cè)絹?lái)越多地發(fā)現(xiàn)并惡意地利用這些漏洞。因此,在部署其軟件之前,開(kāi)發(fā)人員應(yīng)當(dāng)更加主動(dòng)地測(cè)試其代碼,并在新的漏洞出現(xiàn)后立即對(duì)代碼打補(bǔ)丁。

  防御和檢查SQL注入的手段

  1.使用參數(shù)化的過(guò)濾性語(yǔ)句

  要防御SQL注入,用戶(hù)的輸入就絕對(duì)不能直接被嵌入到SQL語(yǔ)句中。恰恰相反,用戶(hù)的輸入必須進(jìn)行過(guò)濾,或者使用參數(shù)化的語(yǔ)句。參數(shù)化的語(yǔ)句使用參數(shù)而不是將用戶(hù)輸入嵌入到語(yǔ)句中。在多數(shù)情況中,SQL語(yǔ)句就得以修正。然后,用戶(hù)輸入就被限于一個(gè)參數(shù)。下面是一個(gè)使用Java和JDBC API例子:

  PreparedStatement prep = conn.prepareStatement("SELECT * FROM USERS WHERE

  PASSWORD=?");

  prep.setString(1, pwd);

  總體上講,有兩種方法可以保證應(yīng)用程序不易受到SQL注入的攻擊,一是使用代碼復(fù)查,二是強(qiáng)迫使用參數(shù)化語(yǔ)句的。強(qiáng)迫使用參數(shù)化的語(yǔ)句意味著嵌入用戶(hù)輸入的SQL語(yǔ)句在運(yùn)行時(shí)將被拒絕。不過(guò),目前支持這種特性的并不多。如H2 數(shù)據(jù)庫(kù)引擎就支持。

  2.還要避免使用解釋程序,因?yàn)檫@正是黑客們借以執(zhí)行非法命令的手段。

  3.防范SQL注入,還要避免出現(xiàn)一些詳細(xì)的錯(cuò)誤消息,因?yàn)楹诳蛡兛梢岳眠@些消息。要使用一種標(biāo)準(zhǔn)的輸入確認(rèn)機(jī)制來(lái)驗(yàn)證所有的輸入數(shù)據(jù)的長(zhǎng)度、類(lèi)型、語(yǔ)句、企業(yè)規(guī)則等。

  4.使用專(zhuān)業(yè)的漏洞掃描工具。但防御SQL注入攻擊也是不夠的。攻擊者們目前正在自動(dòng)搜索攻擊目標(biāo)并實(shí)施攻擊。其技術(shù)甚至可以輕易地被應(yīng)用于其它的Web架構(gòu)中的漏洞。企業(yè)應(yīng)當(dāng)投資于一些專(zhuān)業(yè)的漏洞掃描工具,如大名鼎鼎的Acunetix的Web漏洞掃描程序等。一個(gè)完善的漏洞掃描程序不同于網(wǎng)絡(luò)掃描程序,它專(zhuān)門(mén)查找網(wǎng)站上的SQL注入式漏洞。最新的漏洞掃描程序可以查找最新發(fā)現(xiàn)的漏洞。

  5.最后一點(diǎn),企業(yè)要在Web應(yīng)用程序開(kāi)發(fā)過(guò)程的所有階段實(shí)施代碼的安全檢查。首先,要在部署Web應(yīng)用之前實(shí)施安全測(cè)試,這種措施的意義比以前更大、更深遠(yuǎn)。企業(yè)還應(yīng)當(dāng)在部署之后用漏洞掃描工具和站點(diǎn)監(jiān)視工具對(duì)網(wǎng)站進(jìn)行測(cè)試。

  Web安全拉警報(bào)已經(jīng)響起,安全形式異常嚴(yán)峻,企業(yè)絕對(duì)不應(yīng)當(dāng)草率從事。安全重于泰山!

相關(guān)文章

  • SQL注入黑客防線網(wǎng)站實(shí)例分析

    這篇文章主要介紹了SQL注入黑客防線網(wǎng)站實(shí)例分析,需要的朋友可以參考下
    2017-05-19
  • ASP+PHP 標(biāo)準(zhǔn)sql注入語(yǔ)句(完整版)

    這里為大家分享一下sql注入的一些語(yǔ)句,很多情況下由于程序員的安全意識(shí)薄弱或基本功不足就容易導(dǎo)致sql注入安全問(wèn)題,建議大家多看一下網(wǎng)上的安全文章,最好的防范就是先學(xué)
    2017-05-19
  • mysql 注入報(bào)錯(cuò)利用方法總結(jié)

    這篇文章主要介紹了mysql 注入報(bào)錯(cuò)利用方法總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2016-10-08
  • SQL注入攻擊(攻擊與防范)

    SQL注入是從正常的WWW端口訪問(wèn),而且表面看起來(lái)跟一般的Web頁(yè)面訪問(wèn)沒(méi)什么區(qū)別,所以目前市面的防火墻都不會(huì)對(duì)SQL注入發(fā)出警報(bào),如果管理員沒(méi)查看IIS日志的習(xí)慣,可能被入
    2016-05-21
  • SQL注入測(cè)試實(shí)例分析

    這篇文章主要為大家介紹了SQL注入測(cè)試實(shí)例分析,對(duì)于數(shù)據(jù)庫(kù)安全非常重要,需要的朋友可以參考下
    2014-08-06
  • Sqlmap注入技巧集錦

    sqlmap 是一個(gè)自動(dòng)SQL 射入工具。本文收集了一些利用Sqlmap做注入測(cè)試的TIPS,其中也包含一點(diǎn)繞WAF的技巧,便于大家集中查閱,歡迎接樓補(bǔ)充、分享。
    2014-07-29
  • SQL注入攻防入門(mén)詳解 [圖文并茂] 附示例下載

    畢業(yè)開(kāi)始從事winfrm到今年轉(zhuǎn)到 web ,在碼農(nóng)屆已經(jīng)足足混了快接近3年了,但是對(duì)安全方面的知識(shí)依舊薄弱,事實(shí)上是沒(méi)機(jī)會(huì)接觸相關(guān)開(kāi)發(fā)……必須的各種借口。這幾天把sql注入
    2012-11-06
  • Java防止SQL注入的幾個(gè)途徑

    java防SQL注入,最簡(jiǎn)單的辦法是杜絕SQL拼接,SQL注入攻擊能得逞是因?yàn)樵谠蠸QL語(yǔ)句中加入了新的邏輯
    2012-08-10
  • 防止SQL注入攻擊的一些方法小結(jié)

    SQL注入攻擊的危害性很大。在講解其防止辦法之前,數(shù)據(jù)庫(kù)管理員有必要先了解一下其攻擊的原理。這有利于管理員采取有針對(duì)性的防治措施
    2012-07-10
  • web 頁(yè)面 一些sql注入語(yǔ)句小結(jié)

    web 頁(yè)面 一些sql注入語(yǔ)句小結(jié),對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)一定要注意的事項(xiàng)。
    2012-03-12

最新評(píng)論