freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c語言源代碼靜態(tài)檢測工具設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文(編輯修改稿)

2024-11-13 14:48 本頁面
 

【文章內(nèi)容簡介】 認(rèn)這些代碼的安全性 。 詞法掃描 詞法掃描是 一種以詞法分析為基礎(chǔ)的靜態(tài)代碼安全檢測方法 。 在通過對源代碼的靜態(tài)的掃描過程中,找出可能存在的安全漏洞。 它的基本原理是,首先, 將一個或多個源代碼文件作為輸入 , 并將文件中的源代碼轉(zhuǎn)換為相應(yīng)的詞法符號流 。 然后使詞法符號流與預(yù)先設(shè)定好的安全漏洞字典相比對 。如果發(fā)現(xiàn)比對命中 ,則報(bào)告漏洞。 例如 :一旦發(fā)現(xiàn) c 源程序中存在 strcpy, strcat 等 函數(shù)即認(rèn)為 可能 存在緩沖區(qū)溢出這種安全性漏洞 。這種方法易于操作,但是 采用詞法分析的掃描工具容易出現(xiàn)誤報(bào)。 簡單語義分析 基于簡單語義分析的的檢查工具采用了類似于編譯器的設(shè)計(jì)原理。結(jié)合了語法分析和語義分析技術(shù)。同時也加入了數(shù)據(jù)流分析和控制流分析。因此,這種方法具有較高的準(zhǔn)確性, 較低的錯報(bào) 率 和誤報(bào)率。 同時具有較強(qiáng)的可擴(kuò)展性且 可適用于對大規(guī)模程序的分析 。 沈陽航空航天大學(xué)畢業(yè)設(shè)計(jì)(論文) 9 軟件代碼風(fēng)險(xiǎn)介紹與原理 我們調(diào)研了現(xiàn)今最常出現(xiàn)的代碼安全漏洞風(fēng)險(xiǎn)。他們是 網(wǎng)絡(luò)安全問題的罪魁禍?zhǔn)?,我們?yīng)采取各種方法盡量避免他們的出現(xiàn)。以下我們來做詳細(xì)介紹。他們分別是內(nèi)存訪問錯,緩沖區(qū)溢出,競爭條件,隨機(jī)數(shù)的濫用,異常控制,空指針的使用。 內(nèi)存訪問錯 C 語言程序中引發(fā)安全漏洞的問題,絕大多數(shù)屬于內(nèi)存訪問錯誤,因?yàn)?C 語言并沒有提供完善的內(nèi)存保護(hù)策略。 內(nèi)存訪問錯誤可能由數(shù)組、指針或內(nèi)存管理造成。對指針和數(shù)組缺乏邊界檢查是造成內(nèi)存訪問錯誤的根源。據(jù)統(tǒng)計(jì) , 超過 50%的軟件安全漏洞都 是由指針和數(shù)組 訪問造成的。被列為攻擊手段之首的“緩沖區(qū)溢出攻擊”就是利用此類安全漏洞 。首先, 我們要 仔細(xì)分析 一下 C 語言程序能夠使用的內(nèi)存是怎樣分配的: (1) 從靜態(tài)存儲區(qū)域分配,這塊內(nèi)存在程序的整個運(yùn)行期間都存在,例如全局變量、 static 變量。 (2) 在棧上創(chuàng)建,函數(shù)內(nèi)的局部變量的存儲單元都可以在棧上創(chuàng)建。 (3) 從堆上分配,亦稱動態(tài)內(nèi)存分配。程序在運(yùn)行的時候用 malloc或 new申請任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時用 free或 delete釋放內(nèi)存。動態(tài)內(nèi)存的生存期由程序決定,使用非常靈活,但問題也最多。 針對內(nèi)存從分配、使用到釋放的整個過程,可能發(fā)生如 : (1) 內(nèi)存未成功分配,卻在后續(xù)代碼中使用。 典型的情況就是在堆中動態(tài)的申請一部分內(nèi)存空間,許多有安全漏洞的代碼總是假設(shè)內(nèi)存是分配成功的,繼續(xù)其他操作。但是,在實(shí)際程序運(yùn)行的過程中,內(nèi)存的空間可能被占滿,造成內(nèi)存分配不成功,所以程序必須在使用內(nèi)存空間之前檢查內(nèi)存是否成功分配,以預(yù)防出錯。 (2) 內(nèi)存空間雖然分配成功,但是使用前沒用進(jìn)行初始化。在 C語言中, 內(nèi)存的缺省初值沒有統(tǒng)一的標(biāo)準(zhǔn),盡管有些時候?yàn)榱阒?。如果變量的引用處和其定義處相隔比較遠(yuǎn),變量的初始化很容易被忘記。如果引用了未被初始化的變量,可能會導(dǎo)致程序錯誤。 (3) 內(nèi)存分配成功并且已經(jīng)初始化, 但操作越過了內(nèi)存的邊界。這類錯誤在 C語言中又稱為空間訪問故障,即通過指針或數(shù)組訪問合法范圍外的空間。 C語言缺乏數(shù)組邊界檢查,數(shù)組下標(biāo)越界是一種典型的空間訪問故障。如在使用數(shù)組時經(jīng)常發(fā)生下沈陽航空航天大學(xué)畢業(yè)設(shè)計(jì)(論文) 10 標(biāo)“多 1”或者“少 1”的操作,特別是在 for循環(huán)語句中,循環(huán)次數(shù)很容易搞錯,導(dǎo)致數(shù)組操作越界 ,致使整個程序崩潰 。 (4) 忘記了釋放內(nèi)存,造成內(nèi)存泄露。 C語言中并沒有強(qiáng)行的限制程序員要在使用完內(nèi)存后釋放內(nèi)存空間。所以經(jīng)?;赜胁话踩拇a致使許多內(nèi)存空間泄露。內(nèi)存泄露時黑客常用的一種攻擊手段,其根本原因就是某個內(nèi)存泄露安全漏洞 ,忘記釋放內(nèi)存空間, 導(dǎo)致每被調(diào)用一次就丟失一塊內(nèi)存。剛開始時系統(tǒng)的內(nèi)存充足,你看不到錯誤,因而調(diào)試階段不能發(fā)現(xiàn)錯誤,當(dāng)終于一天內(nèi)存耗盡程序突然死掉,系統(tǒng)將提示:內(nèi)存耗盡。 (5) 釋放了內(nèi)存卻繼續(xù)使用它。 這類故障也稱為時間訪問故障,即在其生存期之外訪問內(nèi)存空間,一個典型的時間訪問故障是訪問一個已經(jīng)釋放的堆分配單元,由于釋放的單元?dú)w還系統(tǒng)后可以重新分配,因此再次訪問時具有不確定的值。 內(nèi)存訪問錯誤很難檢測和修改,因?yàn)椋? 編譯器一般不能自動發(fā)現(xiàn)這些錯誤,通常是在程序運(yùn)行時才能捕捉到。 內(nèi)存訪問錯誤一般沒有 明顯癥狀,除非在異常的情況下。 導(dǎo)致內(nèi)存訪問錯誤的異常條件可能不能再現(xiàn),增加了差錯糾錯的困難; 一旦錯誤再現(xiàn),也可能很難把程序錯誤與內(nèi)存訪問錯誤聯(lián)系 緩沖區(qū)溢出 1988年大規(guī)模蠕蟲傳染了成千上萬臺聯(lián)網(wǎng)主機(jī),罪魁禍?zhǔn)拙褪蔷彌_區(qū)溢出漏洞。在過去 10年里,盡管已經(jīng)意識到緩沖區(qū)溢出的危害,但緩沖區(qū)溢出攻擊仍在增長,據(jù)CERT/CC統(tǒng)計(jì),在過去 10年里,在所有的脆弱性中緩沖區(qū)溢出漏洞占據(jù)了 50%,而且這個數(shù)據(jù)隨時間的流逝還在增長,作為一類內(nèi)存訪問錯誤,由于它的重要性,因此在此進(jìn)一步分析緩沖區(qū)溢出的根源。緩沖區(qū)溢 出就是越過了數(shù)組邊界進(jìn)行讀寫。標(biāo)準(zhǔn) C庫提供的許多字符串操作,如 gets、 strcpy、 strcat、 sprinf,它們本質(zhì)上是不安全。程序員有責(zé)任檢查這些操作能否溢出緩沖區(qū)。例如:程序執(zhí)行 gets(str)指令, str是內(nèi)存一個連續(xù)的存儲區(qū)的首地址, gets從程序的標(biāo)準(zhǔn)輸入讀取文本,把第一個字符放在這個存儲區(qū)的首地址,后續(xù)的字符依次存放,直到從標(biāo)準(zhǔn)輸入讀到新行或文件結(jié)束符,在對應(yīng)的存儲區(qū)放上空字符 /0。程序員沒法指出一個緩沖區(qū)有多大。因此,如果讀 入的文本長度超過給定的存儲區(qū)長度,那么,讀入的字符將覆蓋 str所代表的存儲區(qū)的后續(xù)空間。這就是緩沖區(qū)溢出。 緩沖區(qū)溢出可能造成兩個風(fēng)險(xiǎn): 1)與該緩沖區(qū)相鄰的內(nèi)存空間很容易被覆蓋,如果該空間存儲的信息非常關(guān)鍵,那么可能造成非常嚴(yán)重的安全隱患; 2)通過覆蓋運(yùn)沈陽航空航天大學(xué)畢業(yè)設(shè)計(jì)(論文) 11 行棧中函數(shù)返回地址,攻擊者可以引誘程序執(zhí)行任意代碼,這類棧溢出是目前最常見的安全缺陷。在 C庫函數(shù)中,每個這樣的字符 (函數(shù)都有相應(yīng)的安全函數(shù)對應(yīng): strncpy,strncat, snprintf等,在使用這些函數(shù)時,可以由程序員指出實(shí)際緩沖區(qū)大小,避免發(fā)生緩沖區(qū)溢出。例如, strncpy(dst,src,10)指明,從 src向 dst拷貝不多于 10個字符。然而,這些替代函數(shù)也有不足:一方面用起來不太方便,有些系統(tǒng)不支持這些函數(shù);另一方面,跟蹤緩沖區(qū)實(shí)際大小的任務(wù)仍由程序員來完成。 競爭條件 所有操作系統(tǒng)都有一些陷入 (trapdoor),允許特權(quán)用戶完全控制系統(tǒng),競爭條件是在多進(jìn)程環(huán)境里,特權(quán)程序或與特權(quán)程序并發(fā)運(yùn)行的程序中可能被利用的一類缺點(diǎn)。例如:一個超級用戶為一個普通用戶創(chuàng)建一個文件 (Createfile),并把該文件的所有者更改為該普通用戶 (chown),但在更改所有權(quán)之前,該用戶把此文件刪除,并建立了此文件到系統(tǒng) 關(guān)鍵文件,如 /etc/password的鏈接,這樣,所有權(quán)的更改致使系統(tǒng)文件被這個普通用戶擁有。這個例子說明,在多進(jìn)程的環(huán)境里,創(chuàng)建 (create)和更改 (change) 必須是原子,其完整性不可破壞。進(jìn)程訪問文件的方式有兩種:一種即通過完整的文件路徑訪問文件;另一種是通過文件描述符訪問文件。在系統(tǒng)內(nèi)部,文件系統(tǒng)在概念上講是一棵樹,內(nèi)部結(jié)點(diǎn)代表目錄,葉結(jié)點(diǎn)代表文件,路徑名指出了從樹根到要訪問的文件或目錄所經(jīng)過的各結(jié)點(diǎn)。每個結(jié)點(diǎn)記錄了它的下層結(jié)點(diǎn)的地址,因此通過路徑訪問文件類似于間接指針訪問。文件描述符是在每 個進(jìn)程的基礎(chǔ)上,為每個文件賦予的一個標(biāo)志,它直接與目標(biāo)綁定,當(dāng)訪問文件時,直接通過文件描述符,而不需要 通過文件系統(tǒng)一步一步查找,因此它的使用方式類似于直接指針。 現(xiàn)假設(shè)有兩個系統(tǒng)調(diào)用要訪問文件,如果兩次訪問都使用文件描述符,他們本質(zhì)上是原子的。因?yàn)槲募枋龇且赃M(jìn)程為基礎(chǔ)的,其它進(jìn)程不能改變文件描述符與目標(biāo)的綁定。但如果一個訪問以路徑形式進(jìn)行,那么其它的進(jìn)程可以更改路徑與具體目標(biāo)文件的綁定,這就可能發(fā)生競爭條件。具體地 ,如果相鄰的兩個系統(tǒng)調(diào)用都使用路徑訪問同一個文件,那么可能存在競爭條件,如果一個使用路徑 ,一個使用文件描述符,那么,如果第一個系統(tǒng)調(diào)用是把文件描述符與路徑相關(guān),則不會發(fā)生競爭條件,否則可能發(fā)生競爭條件。如果兩個系統(tǒng)調(diào)用都使用文件描述符,那么這兩個系統(tǒng)調(diào)用間不會發(fā)生競爭條件。 沈陽航空航天大學(xué)畢業(yè)設(shè)計(jì)(論文) 12 隨機(jī)數(shù)濫用 C程序中涉及許多隨機(jī)數(shù)的選取,例如,創(chuàng)建一個臨時文件,用于存取一些臨時數(shù)據(jù),創(chuàng)建一個挑戰(zhàn)號、創(chuàng)建密鑰,出于安全性考慮,臨時文件名和挑戰(zhàn)號等使用由系統(tǒng)函數(shù) rand產(chǎn)生的隨機(jī)數(shù),以防攻擊者猜測。但是,系統(tǒng)提供的 rand是一個偽隨機(jī)數(shù),其內(nèi)部的實(shí)現(xiàn)根據(jù)給定的種子能夠產(chǎn)生可重復(fù)的輸出值。因此,需要程序員選定一個安全的種 子。如果不精心選擇安全的種子,對精明的攻擊者來說,使用隨機(jī)數(shù)同使用固定數(shù)一樣可以猜測。 異常處理 C語言沒有異常處理機(jī)制,所有的異常檢測和處理都必須由程序員主動完成,如果程序員沒有明確處理異常情況,那么異常發(fā)生時系統(tǒng)將出現(xiàn)不可預(yù)測的錯誤。例如: FILE *fp。 char buffer[128] fp=fopen(“ /etc/password” ,“ r” )。 fgets(buffer,sizeof(buffer),fp)。 這個程序假設(shè)系統(tǒng)一定有“ /etc/password”這個系統(tǒng)文件,并且打開總能成功, 如果這個文件被惡意地刪除,或者程序運(yùn)行的權(quán)限不夠,或者其他程序正在獨(dú)占使用該文件,致使打開不成功,那么,后續(xù)的讀操作將發(fā)生核心錯 (coredump)。因此 C程序員有義務(wù)增加異常檢測和處理代碼 , 進(jìn)行主動防錯設(shè)計(jì)。從 C發(fā)展而來的 Java語言提供了非常強(qiáng)大的異常處理機(jī)制,強(qiáng)制程序員對“可檢測異?!边M(jìn)行處理。 空指針引用 空指針即 指向沒有分配的內(nèi)存區(qū)域 ,例如: typedef char *FileContent。 Filecontent file1。 Filecontent file2。 ? strcpy(file2,file1)。 該程序本意是讓 file1指向源,讓 file2指向目標(biāo),通過 strcpy(file2, file1)把 file1指向的內(nèi)容拷貝到 file2中。一般情況下,這種拷貝不會有問題,但是當(dāng) file1沒有指向任何合法的靜態(tài)、局部或動態(tài)分配的空間時,程序運(yùn)行出錯。為此程序在使用指針時,不僅要沈陽航空航天大學(xué)畢業(yè)設(shè)計(jì)(論文) 13 關(guān)心指針本身是否定義,還要關(guān)心指針是否已經(jīng)指向了合法的內(nèi)存空間。應(yīng)該檢查從file1定義到其引用的每條可能路徑,檢查 file1是否一定指向了合法的內(nèi)存空間。 技術(shù)簡介 本系統(tǒng)主要使用 python 開發(fā)后臺程序, PyQt 庫設(shè)計(jì)界面, SQLite 作為后臺數(shù)據(jù)庫?;?linux 操作系統(tǒng)下進(jìn)行開發(fā)。 Python 語言簡介 Python 是一種解釋型、 面向?qū)ο?、動態(tài)數(shù)據(jù)類型的高級程序設(shè)計(jì)語言。自從 20世紀(jì) 90 年代初 Python 語言誕生至今,它逐漸被廣泛應(yīng)用于處理系統(tǒng)管理任務(wù)和 Web編程。 Python 已經(jīng)成為最受歡迎的程序設(shè)計(jì)語言之一。 2020 年 1 月,它被 TIOBE 編程語言排行榜評為 2020 年度語言。自從 2020 年以后, python 的使用率是呈線性增長。 眾多開源的科學(xué)計(jì)算軟件包都提供了 Python 的調(diào)用 接口 ,例如著名的計(jì)算機(jī)視覺 OpenCV、三維可視化庫 VTK、醫(yī)學(xué)圖像處理庫 ITK。而 Python 專用的科學(xué)計(jì)算擴(kuò)展庫就更多了,例如如下 3 個十分經(jīng)典的科學(xué)計(jì)算擴(kuò)展庫: NumPy、 SciPy 和matplotlib,它們分別為 Python 提供了快速數(shù)組處理、數(shù)值運(yùn)算以及繪圖功能。因此Python 語言及其眾多的擴(kuò)展庫所構(gòu)成的開發(fā)環(huán)境十分適合工程技術(shù)、科研人員處理實(shí)驗(yàn)數(shù)據(jù)、制作圖表,甚至開發(fā)科學(xué)計(jì)算應(yīng)用程序。 PyQt 圖形類庫簡介 PyQt 是一個創(chuàng)建 GUI 應(yīng)用程序的工具包。它是 Python 編程語言和 Qt 庫的成功融合。 Qt 庫是目前最強(qiáng)大的庫之 一。 PyQt 是由 Phil Thompson 開發(fā)。 PyQt 實(shí)現(xiàn)了一個 Python 模塊集。它有超過 300 類,將近 6000 個函數(shù)和方法。它是一個多平臺的工具包,可以運(yùn)行在所有主要操作系統(tǒng)上,包括 UNIX, Windows 和 Mac。 PyQt 采用雙許可證,開發(fā)人員可以選擇 GPL 和商業(yè)許可。在此之前, GPL 的版本只能用在 Unix上,從 PyQt 的版本 4 開始, GPL 許可證可用于所有支持的平臺。 SQLite 數(shù)據(jù)庫簡介 SQLite,是一款輕型的數(shù)據(jù)庫,是遵守 ACID 的關(guān)系型 數(shù)據(jù)庫管理系統(tǒng) ,它的設(shè)計(jì)目標(biāo)是嵌入式的,而且 目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百 K 的內(nèi)存就夠了。它能夠支 持Windows/Linux/Unix 等等主流的操作系統(tǒng),同時能夠跟很多程序語言相結(jié)合,比如 沈陽航空航天大學(xué)畢業(yè)設(shè)計(jì)(論文) 14 Python、 C、 PHP、 Java 等,還有 ODBC 接口,同樣比起 Mysql、 PostgreSQL 這兩款開源世界著名的數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。 SQLite第一個 Alpha版本誕生于 2020 年 5 月。 至今已經(jīng)有 14 個年頭, SQLite 也迎來了一個
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1