了解了緩衝區溢位是如何發生的以後,如何防止黑客利用緩衝區溢位攻擊並控制你的本地應用程式就是乙個很重要的問題了。
避免使用編譯器中自帶的庫檔案
程式語言通常都要帶有庫檔案。如果乙個庫檔案具有某些漏洞,任何包括該庫檔案的應用程式就都會有這些漏洞。因此,黑客往往會先試圖利用常用的庫檔案中已知的漏洞來達到攻擊本地應用程式的目的。
庫檔案本身也不可靠。雖然最新的編譯器都開始加入大量可靠的庫檔案,但長期以來庫檔案為了提供了快速、簡單的方式來完成任務,幾乎沒有考慮到安全編碼的問題。c + +程式語言就是這種形式的最典型代表。而用c + +編寫的程式中依賴的標準庫就很容易在執行時產生錯誤,這也為希望利用緩衝區溢位進行攻擊的黑客們提供了實現他們想法的機會。
驗證所有的使用者輸入
要在本地應用程式上驗證所有的使用者輸入,首先要確保輸入字串的長度是有效長度。舉個例子,假設你的程式設計的是接受50個文字字元的輸入,並將它們新增到資料庫裡。如果使用者輸入75個字元,那麼他們就輸入了超出資料庫可以容納的字元,這樣以來誰都不能**程式接下來的執行狀況。因此,使用者的輸入應該這樣設計:在使用者輸入文字字串時,先將該字串的長度同最大允許長度進行比較,在字串超過最大允許長度時能對其進行必要的攔截。
過濾掉潛在的惡意輸入
過濾是另乙個很好的防禦措施。先看下面例子中的asp**:
這是從使用者的輸入中過濾掉html**,撇號和引號的**。
strnewstring = request.form("review")
strnewstring = replace(strnewstring, "&", "& amp;")
strnewstring = replace(strnewstring, "", "& gt;")
strnewstring = replace(strnewstring, "'", "`")
strnewstring = replace(strnewstring, chr(34), "``")上面的**用於目前我正在開發的電子商務**中。這樣做的目的是為了過濾掉可能會導致資料庫出現問題的html**和符號。在html**中,使用""的符號來命名乙個html標籤。為了防止使用者可能會在他們的輸入裡嵌入html**,因此程式過濾掉了""符號。
在asp**中,撇號,引號和連字元都是保留符號。這些保留的符號不可以包括在使用者的輸入中,否則它們會導致應用程式崩潰。例如,如果使用者輸入乙個文字行中只使用了乙個撇號,之後登陸資料庫時,這個命令將會失敗,因為asp需要利用成對的撇號將文字括起來提交到資料庫裡;asp不知道如何處理使用者的輸入中的撇號。為了防止這種情況發生,以上的**可以尋找到輸入字串中的撇號,並以「'「替代它。
測試應用程式
為了保護程式免受緩衝區溢位的攻擊,驗證和過濾使用者的輸入已經實施很久了。但在部署應用程式之前,你仍然需要對它進行全面徹底的測試。應當有專門的人來仔細地審查應用程式,並試圖使它們崩潰。讓他們嘗試輸入長的字串或保留字元。如果你的應用程式在編寫中已經做了足夠的工作,它應該能應付各種各樣的情況。如果程式崩潰了,最好馬上把問題找出來,而不要等到已經應用之後。
防禦緩衝區溢位攻擊的策略
了解了緩衝區溢位是如何發生的以後,如何防止黑客利用緩衝區溢位攻擊並控制你的本地應用程式就是乙個很重要的問題了。避免使用編譯器中自帶的庫檔案 程式語言通常都要帶有庫檔案。如果乙個庫檔案具有某些漏洞,任何包括該庫檔案的應用程式就都會有這些漏洞。因此,黑客往往會先試圖利用常用的庫檔案中已知的漏洞來達到攻擊...
緩衝區溢位攻擊試驗(bufbomb c)
本文的 來自 於 computer systems a programmer s perspective 深入理解計算機系統 一書中的bufbomb.c作業題。實驗環境xp vc6.0。另 linux2.6 gcc4.x下目前碰到棧保護等措施,暫時還沒研究出結果。問題描述如下 分析下面程式,可以得知...
緩衝區溢位
緩衝區溢位是指當電腦程式向緩衝區內填充的資料位數超過了緩衝區本身的容量。溢位的資料覆蓋在合法資料上。理想情況是,程式檢查資料長度並且不允許輸入超過緩衝區長度的字串。但是絕大多數程式都會假設資料長度總是與所分配的儲存空間相匹配,這就為緩衝區溢位埋下隱患。作業系統所使用的緩衝區又被稱為堆疊,在各個操作程...