鐵手劍譜

          上善若水
          數(shù)據(jù)加載中……
          TOP 10 Web應(yīng)用安全之一:輸入校驗(yàn)

          TOP 10 Web應(yīng)用脆弱性之一:未經(jīng)驗(yàn)證的輸入


          描述

          Web 應(yīng)用使用HTTP 請(qǐng)求(也許還有文件,也是一種特殊請(qǐng)求) 來(lái)進(jìn)行輸入,并決定如何進(jìn)行響應(yīng)。攻擊者可以篡改HTTP 請(qǐng)求的任何部分,包括url,查詢(xún)字符串(querystring, headers, cookies, 表單字段(包括隱藏字段),試圖繞過(guò)服務(wù)器的安全機(jī)制。常見(jiàn)的通用輸入篡改攻擊包括:

          o       強(qiáng)迫瀏覽(forced browsing);

          o       命令注入(command insertion);

          o       交叉站點(diǎn)腳本(cross site scripting);

          o       緩沖區(qū)溢出(buffer overflows);

          o       格式字符串攻擊(format string attacks);

          o       SQL注入(SQL injection);

          o       有毒餅干(cookie poisoning);

          o       隱藏字段操作(hidden field manipulation),等等。

           

          某些站點(diǎn)試圖通過(guò)過(guò)濾惡意輸入來(lái)保護(hù)自己。但問(wèn)題是編碼信息的方式無(wú)窮無(wú)盡。這些編碼方式看起來(lái)并不是加密的,所以似乎也用不著解碼。但是,開(kāi)發(fā)人員仍然經(jīng)常忘記將所有的參數(shù)在使用之前解碼為最簡(jiǎn)單的形式。參數(shù)應(yīng)該在其被校驗(yàn)之前轉(zhuǎn)換為最簡(jiǎn)單的形式,否則,惡意輸入就可能掩飾自己從而流過(guò)過(guò)濾器。簡(jiǎn)化這些編碼的過(guò)程稱(chēng)為是“規(guī)格化(canonicalization)”。因?yàn)閹缀跛械?SPAN lang=EN-US>HTTP 輸入都可以編碼為多種格式,這種技術(shù)便可以打亂各種旨在利用和攻擊上述弱點(diǎn)的攻擊行為。這使得過(guò)濾非常困難。

          有非常之多的web 應(yīng)用僅使用客戶(hù)端校驗(yàn)來(lái)驗(yàn)證輸入。客戶(hù)端校驗(yàn)機(jī)制是非常容易繞過(guò)的,這樣就使得Web應(yīng)用幾乎對(duì)惡意參數(shù)的攻擊毫無(wú)保護(hù)。攻擊者可以使用攻擊甚至telnet來(lái)產(chǎn)生他們自己的HTTP 請(qǐng)求。他們才不關(guān)心開(kāi)發(fā)人員預(yù)定想要在客戶(hù)端發(fā)生的時(shí)候事情呢。注意,客戶(hù)端校驗(yàn)僅僅在提高性能和可用性方面有益,但是它毫無(wú)安全可言。因此,對(duì)于惡意參數(shù)攻擊,服務(wù)器端校驗(yàn)是必須的。

          這種攻擊的數(shù)量在不斷上升,因?yàn)橛写罅康闹С謪?shù)的“模糊化”(“fuzzing”)、腐朽(corruption)、以及野蠻強(qiáng)制增長(zhǎng)的工具出現(xiàn)。不應(yīng)該低估了這些使用非校驗(yàn)輸入進(jìn)行攻擊的影響。實(shí)際上如果開(kāi)發(fā)人員能夠在使用參數(shù)之前對(duì)其進(jìn)行驗(yàn)證,就可抵擋大部分的攻擊。因此,最好使用一個(gè)中心化的、強(qiáng)大的驗(yàn)證機(jī)制來(lái)對(duì)所有HTTP 請(qǐng)求的輸入都進(jìn)行驗(yàn)證,這樣利用此弱點(diǎn)進(jìn)行攻擊的數(shù)量就會(huì)大減。


          環(huán)境影響

          所有web servers, application servers, 以及應(yīng)用環(huán)境都容易受到這種參數(shù)篡改的攻擊。


          如何決定你的應(yīng)用是否脆弱

          一個(gè)Web應(yīng)用所用的未經(jīng)驗(yàn)證的HTTP請(qǐng)求的任何和部分都稱(chēng)為是“臟” 參數(shù)。找出臟參數(shù)的最簡(jiǎn)單的方式是進(jìn)行最詳細(xì)的代碼評(píng)審,找出所有從HTTP請(qǐng)求提取信息的方法調(diào)用。比如,在J2EE應(yīng)用中,這些包括HttpServletRequest 類(lèi)(以及其子類(lèi))中的方法。然后你就可以循著代碼查看參數(shù)變量是在哪里使用的。如果變量在使用之前未作驗(yàn)證,這可能就是一個(gè)潛在的問(wèn)題。在Perl中,你因該考慮使用 “taint” (-T) 選項(xiàng)。

          你也可以通過(guò)一些工具來(lái)找出臟參數(shù),比如OWASP WebScarab。它們可以查看和評(píng)審?fù)ㄟ^(guò)HTTP/HTTPS的所有數(shù)據(jù),并進(jìn)行分析。

          如何保護(hù)

          保護(hù)很簡(jiǎn)單,那就是確保任何參數(shù)在被使用之前都進(jìn)行了驗(yàn)證。最好的辦法是使用一個(gè)中心化的組件庫(kù),比如Java中的Jarkarta Commons Validator.每個(gè)參數(shù)都演進(jìn)行嚴(yán)格檢查。涉及到過(guò)濾臟數(shù)據(jù)的“負(fù)面”方法或者依賴(lài)于簽名的方法都不可能很有效率,并且難以維護(hù)。

          參數(shù)應(yīng)該進(jìn)行“正向”規(guī)格的檢查,正向規(guī)格( “positive” specification )的定義可包括:

          • 數(shù)據(jù)類(lèi)型(string, integer, real, )
          • 允許的字符集
          • 最大最小長(zhǎng)度
          • 是否允許null
          • 是否必需
          • 是否允許重復(fù)
          • 數(shù)值范圍
          • 特定的法定值 (枚舉)
          • 特定模式(正則表達(dá)式)

           * 本系列整理自 OWASP(Opensource Web Applicaiton Security Project )

          posted on 2005-09-12 11:52 鐵手 閱讀(1796) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): 企業(yè)架構(gòu)安全

          評(píng)論

          # air jordan 2011-06-10 17:31 air jordan

          I'm agree!
          主站蜘蛛池模板: 顺昌县| 濮阳县| 格尔木市| 西盟| 石渠县| 鸡泽县| 芦溪县| 八宿县| 田东县| 乐至县| 洛宁县| 祁东县| 达尔| 康马县| 蒙自县| 达孜县| 嘉鱼县| 潢川县| 右玉县| 台东市| 泸溪县| 金坛市| 都兰县| 昌乐县| 永宁县| 乐安县| 柞水县| 苏尼特右旗| 临桂县| 瓦房店市| 贞丰县| 通辽市| 金乡县| 乳源| 大同市| 沂源县| 婺源县| 义马市| 濮阳市| 安化县| 闽清县|