服務(wù)器內(nèi)存溢出是什么
在信息化社會的今天,電腦與網(wǎng)絡(luò)已經(jīng)成為人們在工作和休閑中不可或缺的工具,閑暇時人們通過電腦聊天、娛樂、看電影,工作時人們更會用電腦和網(wǎng)絡(luò)來處理公文、傳送文件、甚至進(jìn)行財(cái)務(wù)上的業(yè)務(wù)。于是,便給了黑客可乘之機(jī),他們利用系統(tǒng)的漏洞,專門開發(fā)某種程序,在通過添加一系列匹配的參數(shù),就會取得我們電腦的控制權(quán),窺探我們的隱私,盜取我們的信息,乃至給我們帶來名譽(yù)和財(cái)產(chǎn)上的損失,這種程序設(shè)計(jì)者設(shè)計(jì)時帶來的不足造成的系統(tǒng)漏洞在專業(yè)領(lǐng)域就稱為溢出。
溢出分類有幾種,一是緩沖區(qū)溢出,二是內(nèi)存溢出,還有一種是數(shù)據(jù)溢出。三種溢出對每個電腦用戶的危害都是很大的,小編今天著重給大家介紹下內(nèi)存溢出的一些基本知識。
可以說,自軟件開發(fā)出來,內(nèi)存溢出就已經(jīng)存在了,并跟隨軟件開發(fā)的發(fā)展到了現(xiàn)在,成為了一個歷史上存在了幾十年的大難題,它也成為了黑客攻擊個人電腦,窺探企業(yè)機(jī)密的最大禍?zhǔn)?,著名的比如?nèi)存溢出在紅色代碼病毒事件中的表現(xiàn),當(dāng)時引起業(yè)界一片恐慌。
而且,根據(jù)有關(guān)安全部門的調(diào)查統(tǒng)計(jì),操作系統(tǒng)中一半以上的安全漏洞都是因?yàn)閮?nèi)存溢出所導(dǎo)致的,同時這些漏洞絕大部分與微軟的技術(shù)緊密相關(guān)。雖然微軟的軟件都是針對的臺式機(jī)而開發(fā),如果不連通互聯(lián)網(wǎng),那么內(nèi)存溢出不會導(dǎo)致多么嚴(yán)重的后果,但問題是在當(dāng)下,網(wǎng)絡(luò)已經(jīng)成為個人或是企業(yè)不可或缺的東西,內(nèi)存溢出就成為了黑客進(jìn)行攻擊的最有利助手。
導(dǎo)致內(nèi)存溢出問題的是多樣的,一是使用了C或C++ 等非類型安全的語言,內(nèi)存溢出是 可以說是C語言或C++ 語言難以克服的缺陷,因?yàn)樗鼈儾粰z查數(shù)組邊界,也不檢查類型的可靠性。它們開發(fā)的程序的目標(biāo)代碼與機(jī)器內(nèi)核十分接近,所以可以直接訪問寄存器和內(nèi)存,這樣固然可以大大提升 C或C++ 語言代碼的性能,在執(zhí)行效率上占據(jù)優(yōu)勢,但是導(dǎo)致內(nèi)存溢出問題的概率也要高許多。
二是存取或者復(fù)制內(nèi)存緩沖區(qū)采用了不可靠的方式,簡言之,就是向只能盛12毫升的試管中倒入了16毫升的溶液,那么多出來的4毫升溶液自然就會溢出了;
三是編譯器設(shè)置的內(nèi)存緩沖區(qū)與關(guān)鍵數(shù)據(jù)結(jié)構(gòu)相鄰過于緊密,假設(shè)某個函數(shù)的堆棧與內(nèi)存緩沖區(qū)緊密相連,那么保存的函數(shù)返回地址就會與內(nèi)存緩沖區(qū)相鄰。黑客就可以復(fù)制大量數(shù)據(jù)到內(nèi)存緩沖區(qū),這就使得內(nèi)存緩沖區(qū)溢出并將原先保存于堆棧中的函數(shù)返回地址覆蓋掉,造成損失。
那么對于編程人員來說怎么預(yù)防和解決這個問題呢?有兩種措施,一是在用 C/C++ 書寫代碼時,應(yīng)該處處留意處理來自用戶的數(shù)據(jù)的方式,當(dāng)一個函數(shù)的數(shù)據(jù)來源不可靠,同時又用到內(nèi)存緩沖區(qū)時,那么它就必須嚴(yán)格遵循1.必須得到內(nèi)存緩沖區(qū)的總長度;2.檢驗(yàn)內(nèi)存緩沖區(qū)3.從源代碼開始提高警惕。第二種措施是,利用一些新技術(shù),因?yàn)橹竿绦騿T永不犯錯幾乎是不可能的,那么現(xiàn)在開發(fā)了一些新技術(shù)如基于探測方法、堆棧防御、分割控制和數(shù)據(jù)堆棧等讓底層系統(tǒng)自動保護(hù)程序以避免內(nèi)存溢出的問題。
總而言之,雖然當(dāng)今黑客頻頻攻擊,系統(tǒng)漏洞很多,但是我們還是要相信通過不斷的努力,可以將入侵者擋在安全門之外,放心的用電腦和網(wǎng)絡(luò)這個大家工作和生活中的好幫手啦!