軟件安全-安全編碼_第1頁
軟件安全-安全編碼_第2頁
軟件安全-安全編碼_第3頁
軟件安全-安全編碼_第4頁
軟件安全-安全編碼_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 第五章第五章 安全編碼安全編碼5.1 什么是軟件編碼什么是軟件編碼5.2 編碼方法編碼方法5.3 代碼審核代碼審核5.1 什么是軟件編碼什么是軟件編碼n正確理解軟件編碼正確理解軟件編碼 (1)什么是軟件編碼?)什么是軟件編碼? (2)程序員應(yīng)具備的能力)程序員應(yīng)具備的能力 (3)軟件編碼過程)軟件編碼過程 5.1.1 什么是軟件編碼(什么是軟件編碼(1/2)5.1.1 什么是軟件編碼(什么是軟件編碼(2/2)n 理解軟件編碼理解軟件編碼 復(fù)雜地講,軟件編碼是一個(gè)系統(tǒng)工程,是一個(gè)復(fù)雜而動(dòng)態(tài)的過程,包括程序設(shè)計(jì)和程序?qū)崿F(xiàn),即如何正確的理解用戶需求和軟件設(shè)計(jì)的思想;如何正確的根據(jù)軟件設(shè)計(jì)進(jìn)行程序設(shè)

2、計(jì);如何正確而高效的進(jìn)行代碼編寫和測(cè)試。 軟件編碼是設(shè)計(jì)的繼續(xù),會(huì)影響軟件質(zhì)量和可維護(hù)性。 n 程序員就是軟件工程師,兼顧設(shè)計(jì)和編碼。程序員就是軟件工程師,兼顧設(shè)計(jì)和編碼。 國(guó)內(nèi)對(duì)好程序員的要求是比較高的,不光要掌握一門編程語言,熟悉軟件編碼;還要全方位地了解軟件設(shè)計(jì),這樣才能成為一個(gè)合格的程序員,真正的軟件從業(yè)人員。 5.1.2 程序員應(yīng)具備的能力(程序員應(yīng)具備的能力(1/3)n必備能力必備能力 英語閱讀功底 數(shù)學(xué)功底(算法) 做事的條理性 認(rèn)識(shí)事務(wù)的能力(抽象、模型、結(jié)構(gòu)、層次) 計(jì)算機(jī)軟、硬件基礎(chǔ)知識(shí) SQL編程 拿來主義和拿來的能力 基本功:基本原理和實(shí)踐,欲速則不達(dá)。基本功:基本原理

3、和實(shí)踐,欲速則不達(dá)。5.1.2 程序員應(yīng)具備的能力(程序員應(yīng)具備的能力(2/3)n熱情和勇氣熱情和勇氣 熱情樂天,擯棄絕望,軟件行業(yè)千變?nèi)f化,技術(shù)日新月異 隨時(shí)有面對(duì)無知的勇氣 隨時(shí)有承認(rèn)錯(cuò)誤的勇氣 隨時(shí)準(zhǔn)備加班 n精通一門編程語言精通一門編程語言 了解一點(diǎn)主流桌面應(yīng)用程序程序開發(fā)語言 了解一點(diǎn)主流網(wǎng)絡(luò)應(yīng)用程序開發(fā)技術(shù) 了解一點(diǎn)主流關(guān)系型數(shù)據(jù)庫管理系統(tǒng) 不同的程序設(shè)計(jì)語言只代表其編程元素和規(guī)則不同,但基本的編程、方法都是相通的,掌握了一門即可掌握其它。 5.1.2 程序員應(yīng)具備的能力(程序員應(yīng)具備的能力(3/3)n 如何使自己迅速成為一個(gè)程序員如何使自己迅速成為一個(gè)程序員 抓住一切機(jī)會(huì),勇于實(shí)

4、踐抓住一切機(jī)會(huì),勇于實(shí)踐 克服恐懼心理,敢于寫程序,盡快寫程序 從最簡(jiǎn)單的程序?qū)懫?如果有工程機(jī)會(huì),無償也值 不要避重就輕 知難而上 5.1.3 軟件編碼過程軟件編碼過程5.2 編碼方法編碼方法n 5.2.1 編碼規(guī)范編碼規(guī)范n 5.2.2 若干建議若干建議5.2.1 編碼規(guī)范編碼規(guī)范編碼規(guī)范的必要性:編碼規(guī)范的必要性:n有助于程序的維護(hù),降低軟件生命周期成本,符合有助于程序的維護(hù),降低軟件生命周期成本,符合項(xiàng)目管理的規(guī)律;項(xiàng)目管理的規(guī)律;n使團(tuán)隊(duì)中相關(guān)人員的流動(dòng)對(duì)項(xiàng)目的影響盡可能小,使團(tuán)隊(duì)中相關(guān)人員的流動(dòng)對(duì)項(xiàng)目的影響盡可能小,有利于項(xiàng)目的控制與管理;有利于項(xiàng)目的控制與管理;n提高程序的可讀性

5、,有利于相關(guān)設(shè)計(jì)人員交流,提提高程序的可讀性,有利于相關(guān)設(shè)計(jì)人員交流,提高軟件質(zhì)量;高軟件質(zhì)量;n容易發(fā)現(xiàn)代碼的問題,調(diào)試時(shí)比較容易;容易發(fā)現(xiàn)代碼的問題,調(diào)試時(shí)比較容易;n體現(xiàn)公司形象。體現(xiàn)公司形象。5.2.1 編碼規(guī)范編碼規(guī)范(1)文件命名與組織 (2)縮進(jìn)、空格與換行 (3)命名規(guī)則 (4)聲明 (5)語句 (6)注釋命名方法命名方法nPascal:每個(gè)單詞首字母大寫。:每個(gè)單詞首字母大寫。nCamel:第一個(gè)單詞首字母小寫,余下的單詞首字:第一個(gè)單詞首字母小寫,余下的單詞首字母大寫。母大寫。n縮寫:兩個(gè)字母的縮寫,縮寫:兩個(gè)字母的縮寫,Pascal命名法兩個(gè)字母都命名法兩個(gè)字母都大寫,大

6、寫,Camel命名法,如果兩個(gè)縮寫字母是首單詞命名法,如果兩個(gè)縮寫字母是首單詞,兩個(gè)字母都小寫,否則按照常規(guī)來處理。兩個(gè)以,兩個(gè)字母都小寫,否則按照常規(guī)來處理。兩個(gè)以上字母的縮寫都按照常規(guī)處理。上字母的縮寫都按照常規(guī)處理。文件命名與組織文件命名與組織n文件的命名一般采用文件的命名一般采用Pascal命名規(guī)則,無特殊情況命名規(guī)則,無特殊情況,文件的擴(kuò)展名小寫。,文件的擴(kuò)展名小寫。n文件的擴(kuò)展名使用統(tǒng)一而且通用的擴(kuò)展名,如文件的擴(kuò)展名使用統(tǒng)一而且通用的擴(kuò)展名,如.cs、.java、.cppn盡量避免超過盡量避免超過2000行的文件,盡量避免一行的長(zhǎng)度行的文件,盡量避免一行的長(zhǎng)度超過超過80個(gè)字符。

7、個(gè)字符??s進(jìn)、空格與換行縮進(jìn)、空格與換行n空格、空行不做嚴(yán)格的固定,以使代碼清晰為基本空格、空行不做嚴(yán)格的固定,以使代碼清晰為基本原則。空行不影響程序的運(yùn)行,但可以使代碼看起原則。空行不影響程序的運(yùn)行,但可以使代碼看起來清晰,增加可讀性,因此可以適當(dāng)?shù)亩嘤?。來清晰,增加可讀性,因此可以適當(dāng)?shù)亩嘤?。n代碼的縮進(jìn)建議使用代碼的縮進(jìn)建議使用tab鍵進(jìn)行控制,鍵進(jìn)行控制,tab鍵的大小鍵的大小設(shè)置為設(shè)置為4個(gè)空格。每個(gè)層次都要進(jìn)行縮進(jìn)。個(gè)空格。每個(gè)層次都要進(jìn)行縮進(jìn)。如:如:if (isOverFlow)return false;縮進(jìn)、空格與換行縮進(jìn)、空格與換行n換行,掌握的原則是不要使一行代碼特別的長(zhǎng)

8、。另外,換行換行,掌握的原則是不要使一行代碼特別的長(zhǎng)。另外,換行的原則是,在逗號(hào)后,操作符前換行,換行與首行要保持縮的原則是,在逗號(hào)后,操作符前換行,換行與首行要保持縮進(jìn)。進(jìn)。nif,while,do,try-catch-finally等語句后必須有等語句后必須有,即使里即使里面只有一條語句或?yàn)榭铡C嬷挥幸粭l語句或?yàn)榭???s進(jìn)、空格與換行縮進(jìn)、空格與換行縮進(jìn)、空格與換行縮進(jìn)、空格與換行ExerciseExercise命名規(guī)則命名規(guī)則 標(biāo)識(shí)符的名字應(yīng)當(dāng)直觀且可以拼讀,可望文知義,不必進(jìn)行標(biāo)識(shí)符的名字應(yīng)當(dāng)直觀且可以拼讀,可望文知義,不必進(jìn)行 “解碼解碼”。 例如:例如:CurrentValue與與N

9、owValue 。 變量的名字應(yīng)當(dāng)使用變量的名字應(yīng)當(dāng)使用“名詞名詞”或或“形容詞名詞形容詞名詞”的格式命名。的格式命名。 例如:例如: float value; float oldValue; 全局函數(shù)的名字應(yīng)當(dāng)使用全局函數(shù)的名字應(yīng)當(dāng)使用“動(dòng)詞動(dòng)詞”或者或者“動(dòng)詞名詞動(dòng)詞名詞” (動(dòng)賓詞組)。類的成員函數(shù)應(yīng)當(dāng)(動(dòng)賓詞組)。類的成員函數(shù)應(yīng)當(dāng)只使用只使用“動(dòng)詞動(dòng)詞”,被省略掉的名詞就,被省略掉的名詞就 對(duì)象本身。對(duì)象本身。 例如:例如: DrawBox ( ); / 全局函數(shù)全局函數(shù) box.Draw ( ); / 類的成員函數(shù)類的成員函數(shù) 靜態(tài)變量加前綴靜態(tài)變量加前綴s_ (表示(表示stati

10、c) 例如:例如:static int s_initValue; 如果不得已使用全局變量,全局變量加前綴如果不得已使用全局變量,全局變量加前綴g_ (表示(表示global) 例如:例如:int g_howManyPeople; 類的成員變量加類的成員變量加m(表示(表示member),從而避免數(shù)據(jù)成員與成員函數(shù)的參數(shù)重名。),從而避免數(shù)據(jù)成員與成員函數(shù)的參數(shù)重名。 例如:例如:void Object:SetValue( int width, int height ) m_width = width; m_height = height; 聲明聲明n每行只定義一個(gè)聲明,多個(gè)聲明要分多行來定義。

11、如:每行只定義一個(gè)聲明,多個(gè)聲明要分多行來定義。如:int intAge,intWeight;/不推薦不推薦應(yīng)使用如下的定義形式:應(yīng)使用如下的定義形式:int intAge;int intWeight;n聲明的位置:變量要在塊的開始的地方集中進(jìn)行聲明,不要聲明的位置:變量要在塊的開始的地方集中進(jìn)行聲明,不要何時(shí)用到何時(shí)臨時(shí)定義。何時(shí)用到何時(shí)臨時(shí)定義。語句語句n一行一條語句一行一條語句注釋注釋n要養(yǎng)成良好的代碼注釋習(xí)慣,通常,注釋要占實(shí)際代碼總行要養(yǎng)成良好的代碼注釋習(xí)慣,通常,注釋要占實(shí)際代碼總行數(shù)的數(shù)的1/3,同時(shí),要在編寫代碼前或編寫代碼的同時(shí)進(jìn)行代碼,同時(shí),要在編寫代碼前或編寫代碼的同時(shí)進(jìn)

12、行代碼的注釋,不要事后補(bǔ)寫注釋。的注釋,不要事后補(bǔ)寫注釋。n注釋分為多行注釋和單行注釋,我們的原則是:在類和方法注釋分為多行注釋和單行注釋,我們的原則是:在類和方法的前面,要寫多行注釋,在定義類的全局變量的前面,要寫多行注釋,在定義類的全局變量/常量,以及方常量,以及方法的內(nèi)部,使用單行注釋。注釋的前面與代碼之間要有空行法的內(nèi)部,使用單行注釋。注釋的前面與代碼之間要有空行n即使是單行注釋,我們鼓勵(lì)都要單獨(dú)一行,不鼓勵(lì)在語句的即使是單行注釋,我們鼓勵(lì)都要單獨(dú)一行,不鼓勵(lì)在語句的后面使用注釋,當(dāng)然,在變量定義的后面使用注釋也是允許后面使用注釋,當(dāng)然,在變量定義的后面使用注釋也是允許的,但不建議這么

13、做。的,但不建議這么做。n另外,在編寫注釋的時(shí)候,建議使用編程語言自己的注釋風(fēng)另外,在編寫注釋的時(shí)候,建議使用編程語言自己的注釋風(fēng)格。格。注釋注釋n特別注意,如果是在已經(jīng)發(fā)行版本的基礎(chǔ)上添加、修改、刪特別注意,如果是在已經(jīng)發(fā)行版本的基礎(chǔ)上添加、修改、刪除代碼,則需要將原先的代碼注釋掉,而不是直接刪除掉,除代碼,則需要將原先的代碼注釋掉,而不是直接刪除掉,然后添加自己的代碼。如:然后添加自己的代碼。如:添加新代碼的注釋:添加新代碼的注釋:/add by 姓名姓名 yyyyMMdd xxx / add by 姓名姓名 yyyyMMdd修改代碼的注釋:修改代碼的注釋: /update by 姓名姓名

14、 yyyyMMdd / xxx yyy / update by 姓名姓名 yyyyMMdd刪除代碼的注釋:刪除代碼的注釋:/delete by 姓名姓名 yyyyMMdd /xxx/ delete by 姓名姓名 yyyyMMdd/* * * 命名空間 : * 類 名 : * 功能描述 : * 處理流程 : * 算 法 : * 姓 名 : * 日 期 : * 修 改 : * 日 期 : * 錯(cuò)誤編號(hào) : * 備 注 : * 版 本 : * */程序注釋的原則程序注釋的原則 注釋應(yīng)當(dāng)淺顯、明白注釋應(yīng)當(dāng)淺顯、明白 注釋不是程序員指南注釋不是程序員指南 注釋不是標(biāo)準(zhǔn)庫函數(shù)參考手冊(cè)注釋不是標(biāo)準(zhǔn)庫函數(shù)參

15、考手冊(cè) 注釋的主要任務(wù)是答疑解惑而不是增注釋的主要任務(wù)是答疑解惑而不是增加程序的行數(shù)加程序的行數(shù) 好的注釋是對(duì)設(shè)計(jì)思想的精確表述和好的注釋是對(duì)設(shè)計(jì)思想的精確表述和清晰展現(xiàn)清晰展現(xiàn) 5.2.2 若干建議若干建議n某些“ 自由的”語言更容易引發(fā)內(nèi)存錯(cuò)誤(如C/C+) n要避免產(chǎn)品中出現(xiàn)內(nèi)存錯(cuò)誤,好的編碼規(guī)范、所選的語言和 工具、有效的測(cè)試等工作都是有意義的 內(nèi)存分配方式內(nèi)存分配方式n從靜態(tài)存儲(chǔ)區(qū)域分配:內(nèi)存在編譯時(shí)已分配好,在從靜態(tài)存儲(chǔ)區(qū)域分配:內(nèi)存在編譯時(shí)已分配好,在程序的整個(gè)運(yùn)行期間都存在。例如:全局變量、靜程序的整個(gè)運(yùn)行期間都存在。例如:全局變量、靜態(tài)變量等。態(tài)變量等。 n在堆棧上創(chuàng)建:在函

16、數(shù)執(zhí)行期間,函數(shù)內(nèi)的局部變?cè)诙褩I蟿?chuàng)建:在函數(shù)執(zhí)行期間,函數(shù)內(nèi)的局部變量(包括形參)的存儲(chǔ)單元都創(chuàng)建在堆棧上,函數(shù)量(包括形參)的存儲(chǔ)單元都創(chuàng)建在堆棧上,函數(shù)結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)釋放(堆棧清退)。結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)釋放(堆棧清退)。 n從堆(從堆(heap )上分配,也稱動(dòng)態(tài)內(nèi)存分配:程序運(yùn))上分配,也稱動(dòng)態(tài)內(nèi)存分配:程序運(yùn)行期間用行期間用malloc或或new 申請(qǐng)任意數(shù)量的內(nèi)存,程序申請(qǐng)任意數(shù)量的內(nèi)存,程序員自己掌握釋放內(nèi)存的恰當(dāng)時(shí)機(jī)(使用員自己掌握釋放內(nèi)存的恰當(dāng)時(shí)機(jī)(使用free或或delete)。)。 5.2.2 若干建議若干建議n斷言(assert)的用法是受限制的,其根本原因

17、在于斷言內(nèi)部的語句在軟件的發(fā)布版本(Release版)中將變成空語句,不起任何作用; n宏定義的優(yōu)點(diǎn)和缺點(diǎn)同樣明顯,這種情況下,程序員需要趨利弊害,擇善而從。n改進(jìn)算法可以顯著提高速度 n將代碼和數(shù)據(jù)保存在更快的介質(zhì)上同樣可以顯著提高速度 n編譯優(yōu)化選項(xiàng)并不總能提高速度 5.3 代碼審核代碼審核n常見的軟件編碼漏洞常見的軟件編碼漏洞n源碼審查源碼審查5.3.1 常見的軟件編碼漏洞常見的軟件編碼漏洞n輸入檢測(cè)機(jī)制輸入檢測(cè)機(jī)制n例外處理機(jī)制例外處理機(jī)制n緩沖區(qū)溢出緩沖區(qū)溢出nSQL注入注入n競(jìng)爭(zhēng)條件競(jìng)爭(zhēng)條件輸入檢測(cè)機(jī)制輸入檢測(cè)機(jī)制n輸入?yún)?shù)的合法性檢查輸入?yún)?shù)的合法性檢查n使用白名單使用白名單例外

18、處理機(jī)制例外處理機(jī)制n處理意料之外的事件處理意料之外的事件n使用條件判斷使用條件判斷緩沖區(qū)溢出緩沖區(qū)溢出n防止寫緩沖區(qū)越界防止寫緩沖區(qū)越界n添加檢測(cè)機(jī)制添加檢測(cè)機(jī)制SQL注入注入n防止執(zhí)行非法防止執(zhí)行非法SQL語句語句n從用戶訪問接口中刪除從用戶訪問接口中刪除SQL語句執(zhí)行機(jī)制語句執(zhí)行機(jī)制競(jìng)爭(zhēng)條件競(jìng)爭(zhēng)條件n避免因未處理死循環(huán)、死鎖、資源沖突或處理不當(dāng)避免因未處理死循環(huán)、死鎖、資源沖突或處理不當(dāng)造成軟件漏洞造成軟件漏洞n信號(hào)量信號(hào)量n互斥互斥n關(guān)鍵段關(guān)鍵段5.3.2 源碼審查源碼審查n靜態(tài)代碼分析工具靜態(tài)代碼分析工具n計(jì)量分析計(jì)量分析n代碼分析過程圖代碼分析過程圖靜態(tài)代碼分析工具靜態(tài)代碼分析工具nPVS-StudionCheckstylenFindBugsnPMDnJtestnPC-LINT該網(wǎng)址收錄了目前基本上所有的靜態(tài)代碼分析工具,其該網(wǎng)址收錄了目前基本上所有的靜態(tài)代碼分析工具,其中(中(HP)Fortify

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論