程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 通過Visual Studio應對Web應用程序安全威脅

通過Visual Studio應對Web應用程序安全威脅

編輯:關於.NET

對於Web應用程序的開發者來說,性能與安全就好像兩把利劍插在他們心頭。Web應用程序由 於其面對用戶的特殊性,所以特別容易受到攻擊。筆者在這裡以ASP.NET+VisualStudio為例, 談談該如何有效應對Web應用程序安全威脅。

一、主要安全威脅分析。

對於Web應用程序來說,其可能受到的安全威脅有很多。如電子欺騙、篡改等等。筆者在這 裡將常見的一些安全威脅作一些講解。這些內容可以為後面講到的應對措施建立一個背景知識 。

第一個威脅是篡改。篡改是指在未經管理員授權的情況下更改或者和刪除資源。如前段日子 ,經常有人報料網站被攻擊、主頁被更改的面目全非。要進行這個篡改,難度也不高,重要的 是取得相關的權限,然後通過腳本就可以來完成。針對這個威脅,現在常用的手段是使用 Windows操作系統的安全機制來鎖定文件、目錄和其他的資源。另外,就是要最好權限管理,如 Web應用程序應該以最少的特權來運行等等。

第二個威脅是電子欺騙。簡單的說,電子欺騙是說以未經授權的方式模擬用戶和進程。如通 過電子欺騙可以非法鍵入其他用戶的憑據、更改Cookie 中的內容已假裝是合法的用戶等等。針 對這種電子欺騙,往往可以使用嚴格的身份驗證機制來處理。也就是說,每當有用戶請求訪問 非公開信息的時候,如企業內部的OA系統或者郵件系統(它們掛在企業的網站上),就需要使用 嚴格的身份驗證機制來確保這些用戶身份的合法性,特別是要判斷他們的身份是否與他們聲稱 的身份相符合。如下圖所示,有時候用戶聲稱的時候可能跟真實身份不一致(聲稱的身份是假冒 的)。此時就需要在在身份驗證機制的幫助下,根據一定的規則來判斷 “用戶聲稱身份”與“ 用戶真實身份”的符合程度。如果符合的話,可以就受其請求,不符合的話則拒絕。

三是拒絕服務。拒絕服務攻擊 就是指采取某種手段故意導致應用程序的可用性降低。如采取某種手段,讓Web應用程序負載過 渡,使其無法為普通用戶提供服務。舉一個形象的例子,就好像使租個幾千輛QQ車子在狹窄的 馬路上來回跑。此時由於馬路已經被占滿,其他車就開不進來。拒絕服務往往是一種損人不利 己的行為。要防止拒絕服務攻擊的話,對於普通企業來說,往往可以限制提供服務請求的數量 或者說拒絕已知的惡意用戶和IP地址的訪問等等。

除了以上這些威脅之外,還可能有特權升級、信息洩露、否認等等安全威脅行為。可見要設 計一個安全的Web應用程序,難度不小。筆者在這方面雖然稱不上專家,但是還是有一些自己的 心得。在這裡筆者就拿出來供大家參考。

二、針對以上安全威脅的應對措施。

對於以上這些安全威脅行為,筆者采取了如下的應對措施。

措施一:使用最少的特權運行應用程序。

當一個VisualStudio平台開發出來的Web應用程序運行的時候,筆者建議不要以系統管理員 的身份來運行這個程序,而應該在具有最少用戶特權的上下文中運行應用程序。在必要的情況 下,最好還需要通過ACL或者訪問控制列表來限制應用程序所能夠使用的資源。如常見的方法就 是如果應用程序不需要更改某個文件夾,只需要讀取其中的內容,那麼就可以將其設置為只讀 。不過要做到這一點的話,難度也不少。至少開發人員必須要對 VisualStudio和ASP.NET開發 的Web應用程序必需的訪問控制列表有所熟悉。簡單的說,就是要知道其運行的時候需要用到哪 些文件夾,並且要了解是只讀訪問還是讀寫或者刪除訪問。筆者對這些內容做了總結。一般來 說,全局程序集緩存(Assembly文件夾)、應用程序文件(Web應用程序目錄)、系統程序集 (Framework所在的文件夾),對於這些內容應用程序都是只讀訪問,而不會對其中的內容進行更 改或者刪除。那麼出於安全考慮,在應用程序開發的時候,就可以將這些文件夾設置為只讀。 再如在應用程序用到的所有文件夾中,只有用戶Web服務支持的Temp文件夾應用程序會對其進行 刪除操作,其他的都不會。此時再ACL設置的時候,就只需要將這個文件夾設置為可以刪除,其 他的文件夾都禁止普通用戶的刪除操作。通過這些方面的設置,就可以使得應用程序在最小的 權限內運行,能夠很好的消除篡改等安全威脅。

措施二:對字符串使用HTML編碼在Web應用程序中防止腳本入侵。

篡改或者電子欺騙等等很多攻擊行為,都是通過腳本入侵來完成的,或者說腳本入侵是其進 行攻擊的一個必要步驟。如果能夠在Web應用程序中有效的避免腳本入侵,那麼就可以將其安全 等級上升到一個比較高的層次。筆者建議,在應用程序開發中,可以對字符串使用HTML編碼來 防止腳本入侵。這主要是因為 HTML編碼使用HTML保留字符來轉換HTML元素,主要的目的就是只 顯示相關的內容而不去執行。簡單的說,通過HTML編碼,系統只是照本宣科的將其接收到的內 容顯示出來,而不會去管內容是什麼。

一般來說,大多數腳本入侵的情況都是發生在用戶執行可執行代碼或者腳本的時候。簡單的 說,就是入侵者會通過某種手段將某段代碼跟正常的可執行代碼捆綁在一起。但用戶運行這段 合法的可執行代碼的同時,那隱藏在背後的腳本也就無聲無息的執行了。從而完成入侵者的某 種目的,如提升權限或者篡改等等。

在應用程序開發中,對於字符串使用HTML編碼可以有效防止腳本入侵。具體的說,就是可以 對窗體變量、查詢字符串變量或者Cookie的值執行參數驗證。這個驗證一般來說包含兩個層面 ,一是將變量轉換為所需要的類型的驗證,二是所需范圍和格式的驗證。舉一個簡單的例子, 在某段代碼運行的時候,可能需要一個字符串的變量,這個變量長度為3個字符。在接受這個變 量之前,需要對其進行驗證。一是要驗證數據類型是否准確(即是否為字符類型),二是要驗證 范圍(如可能這個變量只有幾個特定的值,就要驗證是否在列舉的值的范圍之內)。如果驗證通 不過的話,則就會拒絕請求。可見這種方式可以有效的避免攻擊者在變量中插入惡意的腳本。

上面這是輸入驗證,同時在輸出的時候也需要一個驗證過程。當將值寫回到響應的時候,可 以向字符串輸出使用HTML編碼。這種方式能夠確保用戶提供的所有字符將以靜態的文本形式通 過浏覽器呈現給用戶。而不是顯示為可執行腳本代碼或者已解釋的HTML元素等等。如此的話, 即使內容中有惡意的腳本代碼,其也只會一五一十的顯示在浏覽器上,而不會去執行它。

要實現這種安全機制方法也比較簡單。只需要在顯示字符串之前,通過HtmlEncode方法來進 行轉換即可。如 servel.htmlencode(字符串內容或者變量)即可。采用這種方法之後,HTML元 素就會被轉換為字符串表示的形式。此時即使字符串中還有惡意代碼,也已經失去了威力。這 就好像是一顆炸彈,沒有了導火線,就跟一堆廢鐵差不多了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved