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

正文內(nèi)容

cc語言安全編程規(guī)范v10-免費(fèi)閱讀

2025-05-08 10:44 上一頁面

下一頁面
  

【正文】 這樣做將避免文件在程序運(yùn)行時被替換(一種可能的競爭條件)。realpath() 函數(shù)返回絕對路徑,刪除了所有符號鏈接:void Compliant(char *lpInputPath){ char realpath[MAX_PATH]。 int file_access_permissions = S_IRUSR|S_IWUSR。 /* terminate NTBS */}注意:對于sizeof(int) == sizeof(char)的平臺,用int接收返回值也可能無法與EOF區(qū)分,這時要用feof()和ferror()檢測文件尾和文件錯誤。 int c。 //【錯誤】不要使用char類型來接收字符I/O的返回值 int i = 0。fputc()、putc()、putchar()和ungetc()也返回一個字符或EOF。 //【錯誤】C++中,不要使用C風(fēng)格的字符串操作函數(shù) strcat(buf, msg)。}:C++中,必須使用C++標(biāo)準(zhǔn)庫替代C的字符串操作函數(shù)說明:C標(biāo)準(zhǔn)的系列字符串處理函數(shù)strcpy/strcat/sprintf/scanf/gets,不檢查目標(biāo)緩沖區(qū)的大小,容易引入緩沖區(qū)溢出的安全漏洞。上面如果不注意,就可能會導(dǎo)致內(nèi)存訪問越界、緩沖區(qū)溢出等問題,所以建議不要使用ostrstream。 if (pid == 1) { puts(fork error)。 useradd attacker最終shell將字符串”any_exe happy。C99函數(shù)system()的實(shí)現(xiàn)正是通過調(diào)用命令解析器來執(zhí)行入?yún)⒅付ǖ某绦?命令。 /*【修改】使用strncat代替strcat */ strncat(buf, suffix, sizeof(buf)strlen(buf)1)。 //【錯誤】避免使用strcat fputs(buf, stderr)。如VRP提供了VOS_xxx_safe版本的安全函數(shù),推薦基于VRP的產(chǎn)品使用。這個版本的函數(shù)增加了以下安全檢查:l 檢查源指針和目標(biāo)指針是否為NULL;l 檢查目標(biāo)緩沖區(qū)的最大長度是否小于源字符串的長度;l 檢查復(fù)制的源和目的對象是否重疊。 i len。 printf (%s, ptr)。 char *ptr = alloca (size), *p。如果黑客能控制非動態(tài)申請的內(nèi)存內(nèi)容,并對其進(jìn)行精心的構(gòu)造,甚至導(dǎo)致程序執(zhí)行任意代碼。 if(x 0) //【修改】增加對x進(jìn)行合法性校驗(yàn) { y = (int *)malloc( x * sizeof(int))。 //未對x進(jìn)行合法性校驗(yàn) for(i=0。 if (ptr) { /* ...do something... */ free(ptr)。:禁止重復(fù)釋放內(nèi)存說明:重復(fù)釋放內(nèi)存(doublefree)會導(dǎo)致內(nèi)存管理器出現(xiàn)問題。 /* ...do something... */ headnext = NULL。如果返回這些已釋放的存儲單元的地址(棧地址),可能導(dǎo)致程序崩潰或惡意代碼被利用。}/*...申請的內(nèi)存使用后free...*/ 延伸閱讀材料:參見《C和C++安全編碼》(機(jī)械工業(yè)出版社出版,作者Robert )第4章的tar命令的漏洞。 int i, j。 ++i) { for (j = 0。此外,分配內(nèi)存初始化,可以消除之前可能存放在內(nèi)存中的敏感信息,避免敏感信息的泄露。 UINT32 i = 0x8000000。define BUF_LEN (4)INT32 NoCompliant(void){ INT32 ret = 0。 } UINT64 alloc = blockNum * 16。 /* 帶符號的len被轉(zhuǎn)換為size_t類型的無符號整數(shù),負(fù)值被解釋為一個極大的正整數(shù)。 }:確保整型轉(zhuǎn)換時不會出現(xiàn)符號錯誤說明: 有時從帶符號整型轉(zhuǎn)換到無符號整型會發(fā)生符號錯誤,符號錯誤并不丟失數(shù)據(jù),但數(shù)據(jù)失去了原來的含義。特別是將運(yùn)算結(jié)果用于以下用途:l 作為數(shù)組索引l 指針運(yùn)算l 作為對象的長度或者大小l 作為數(shù)組的邊界(如作為循環(huán)計(jì)數(shù)器)錯誤示例:數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)化導(dǎo)致數(shù)據(jù)被截?cái)唷?} *ret = si1 * si2。將運(yùn)算結(jié)果用于以下之一的用途,應(yīng)防止溢出:l 作為數(shù)組索引l 指針運(yùn)算l 作為對象的長度或者大小l 作為數(shù)組的邊界l 作為內(nèi)存分配函數(shù)的實(shí)參錯誤示例:下列代碼中兩個有符號整數(shù)相乘可能會產(chǎn)生溢出。 /*上面的代碼可能會導(dǎo)致ui1加ui2產(chǎn)生無符號數(shù)反轉(zhuǎn)現(xiàn)象,譬如ui1 = UINT_MAX且ui2 = 2。 sprintf(buffer, Usage: %.100s argument\n, argv[0])。 printf(“%s”, input)。 printf(input)。 /* ...do something... */ printf(Error (type %s)\n)。 int errortype = 3。 int errortype = 3。 int error_type = 3。但當(dāng)源內(nèi)存和目標(biāo)內(nèi)存存在重疊時,memcpy會出現(xiàn)錯誤,而memmove能正確地實(shí)施拷貝,但這也增加了一點(diǎn)點(diǎn)開銷。}推薦做法:使用memmove函數(shù),源字符串和目標(biāo)字符串所指內(nèi)存區(qū)域可以重疊,但復(fù)制后目標(biāo)字符串內(nèi)容會被更改,該函數(shù)將返回指向目標(biāo)字符串的指針。 /* 【修改】防止緩沖區(qū)重疊出錯 */ snprintf(cBuf, MAX_LEN, %d: %s, nPid, cDesc)。 strncpy(cBuf, ”Hello World!”, strlen(”Hello World!”))。 char *temp = getInputMsg()。}:把數(shù)據(jù)復(fù)制到固定長度的內(nèi)存前必須檢查邊界說明:將未知長度的數(shù)據(jù)復(fù)制到固定長度的內(nèi)存空間可能會造成緩沖區(qū)溢出,因此在進(jìn)行復(fù)制之前應(yīng)首先獲取并檢查數(shù)據(jù)長度。 printf(dst)。 tmp = dst。 char src[] = 0123456789。, sizeof(dst))。注意:strncpy、strncat等帶n版本的字符串操作函數(shù)在源字符串長度超出n標(biāo)識的長度時,會將包括’\0’結(jié)束符在內(nèi)的超長字符串截?cái)?,?dǎo)致’\0’結(jié)束符丟失。 src[i]!=’\0’ amp。 dst[i] = ’\0’。 memset(src, 39。void main(int argc, char *argv[]){ char *dst = NULL。一些存在的代碼(聲明或表達(dá)式),即使它被執(zhí)行后,也不會對代碼的結(jié)果或數(shù)據(jù)的狀態(tài)產(chǎn)生任何的影響,或者產(chǎn)生不是所預(yù)期的效果,這樣的代碼在可能是由于編碼錯誤引起的,往往隱藏著邏輯上的錯誤。例如在Solaris中,setuid()的適當(dāng)?shù)臋?quán)限指的是PRIV_PROC_SETID權(quán)限在進(jìn)程的有效權(quán)限集中。密鑰長度符合最低安全要求:l AES: 128位l RSA: 2048位l DSA: 1024位l SHA: 256位:遵循最小權(quán)限原則說明:程序在運(yùn)行時可能需要不同的權(quán)限,但對于某一種權(quán)限不需要始終保留。對于敏感信息建議采取以下方法,l 不打印在日志中;l 若因?yàn)樘厥庠虮仨氁蛴∪罩?,則用“*”代替。(3)輸入驗(yàn)證前,對數(shù)據(jù)進(jìn)行歸一化處理以防止字符轉(zhuǎn)義繞過校驗(yàn):通過對輸入數(shù)據(jù)進(jìn)行歸一化處理(規(guī)范化,按照常用字符進(jìn)行編碼),徹底去除元字符,可以防止字符轉(zhuǎn)義繞過相應(yīng)的校驗(yàn)而引起的安全漏洞。建議:編程時必須加以考慮的約定。為了幫助產(chǎn)品開發(fā)團(tuán)隊(duì)編寫安全的代碼,減少甚至規(guī)避由于編碼錯誤引入安全風(fēng)險(xiǎn),特制定本規(guī)范。C++語言安全編程規(guī)范內(nèi)部公開華為技術(shù)有限公司內(nèi)部技術(shù)規(guī)范DKBA Camp。C++語言安全編程規(guī)范0 規(guī)范制定說明 前言隨著公司業(yè)務(wù)發(fā)展,越來越多的產(chǎn)品被公眾、互聯(lián)網(wǎng)所熟知,并成為安全研究組織的研究對象、黑客的漏洞挖掘目標(biāo),容易引起安全問題。 適用范圍本規(guī)范適合于公司基于C或C++語言開發(fā)的產(chǎn)品。1 通用原則:對外部輸入進(jìn)行校驗(yàn)說明:對于外部輸入(包括用戶輸入、外部接口輸入、配置文件、網(wǎng)絡(luò)數(shù)據(jù)和環(huán)境變量等)可能用于以下場景的情況下,需要檢驗(yàn)入?yún)⒌暮戏ㄐ裕簂 輸入會改變系統(tǒng)狀態(tài)l 輸入作為循環(huán)條件l 輸入作為數(shù)組下標(biāo)l 輸入作為內(nèi)存分配的尺寸參數(shù)l 輸入作為格式化字符串l 輸入作為業(yè)務(wù)數(shù)據(jù)(如作為命令執(zhí)行參數(shù)、拼裝sql語句、以特定格式持久化)l 輸入影響代碼邏輯這些情況下如果不對用戶數(shù)據(jù)作合法性驗(yàn)證,很可能導(dǎo)致DoS、內(nèi)存越界、格式化字符串漏洞、命令注入、SQL注入、緩沖區(qū)溢出、數(shù)據(jù)破壞等問題?!鞍酌麊巍北取昂诿麊巍备芡扑]的原因是,程序員不必花力氣去捕捉所有不可接受的字符,只需確保識別了可接受的字符就可以了。加密算法分為對稱加密算法和非對稱加密算法。在進(jìn)行這樣的操作時,要保證撤銷順序的正確性。當(dāng)權(quán)限功能位置為0時,setuid(getuid())沒有如預(yù)期的那樣撤銷權(quán)限成功。void main(int argc, char *argv[]){ char dst[128]。void NoCompliant(){ char dst[ARRAY_SIZE + 1]。amp。39。 /*…*/ }:字符串操作過程中確保字符串有’\0’結(jié)束符說明:字符串結(jié)束與否是以’\0’作為標(biāo)志的。 char *tmp = NULL。 }while (*tmp++)。 memcpy(dst, src, strlen(src))。 void Nonpliant(){ char dst[5]。 dst[sizeof(dst)1] = ’\0’。 if(temp != NULL) { strcpy(dst,temp)。在使用像memcpy、strcpy、strncpy、sscanf()、sprintf()、snprintf()和wcstombs()這樣的函數(shù)時,復(fù)制重疊對象會存在未定義的行為,這種行為可能破壞數(shù)據(jù)的完整性。 char cDesc[MAX_LEN + 1] = {0}。 ptr2 = ptr1+MSG_OFFSET。 memmove(ptr2, ptr1, MSG_SIZE)。 int error_type = 3。 }。 }。錯誤示例:格式字符和參數(shù)的數(shù)量不匹配,格式化字符串在編碼時會大量使用,如拼裝SQL語句和拼裝調(diào)試信息。錯誤示例:下列代碼直接將用戶輸入作為格式字符串輸出。推薦做法:通過顯式參數(shù)”%s”將 printf()的格式化字符串確定下來。 /* ...do something... */}推薦做法:優(yōu)先采用snprintf替代sprintf來防止緩沖區(qū)溢出。將運(yùn)算結(jié)果用于以下之一的用途,應(yīng)防止反轉(zhuǎn):l 作為數(shù)組索引l 指針運(yùn)算l 作為對象的長度或者大小l 作為數(shù)組的邊界l 作為內(nèi)存分配函數(shù)的實(shí)參錯誤示例:下列代碼可能導(dǎo)致相加操作產(chǎn)生無符號數(shù)反轉(zhuǎn)現(xiàn)象。 } return OK。}推薦做法:INT32 Compliant(INT32 si1, INT32 si2, INT32 *ret){ if ( NULL == ret ) { return ERROR。具體可參考USCERT披露的漏洞VU559444。 } if(SCHAR_MAX = ui) //【修改】確保整型轉(zhuǎn)換時不會出現(xiàn)截?cái)?{ *ret = (INT8)ui。 if (argc != 3) { return 1。這里所說的更大整數(shù)類型是相對整型表達(dá)式的操作數(shù)類型而言,譬如整型表達(dá)式的操作數(shù)類型是unsigned int ,則該規(guī)則所說的更大類型是指 unsigned long long。} /*...申請的內(nèi)存使用后free...*/ :避免對有符號整數(shù)進(jìn)行位操作符運(yùn)算說明:位操作符(~、amp。 /* i 24的結(jié)果是0xFFFFFFF8(10進(jìn)制4294967288),導(dǎo)致轉(zhuǎn)換為 一個字符串時,長度超過BUF_LEN,無法存儲在buf中,因此被snprintf截 斷;若是采用sprintf, 這個例子就會產(chǎn)生緩沖區(qū)溢出*/ if(1 == ret || BUF_LEN = ret) { return ERROR。 } return OK。 int i, j。int * Compliant(int **A, int *x, int n){ if(n = 0) return NULL。 j n。即使是對空指針的解引用,也可能導(dǎo)致任意代碼執(zhí)行漏洞。Node * Nonpliant(){ Node * head = (Node *)malloc(Node)。 //【錯誤】返回了局部變量}延伸閱讀材料:參考《C和C++安全編碼》 寫入釋放的內(nèi)存部分。 } /* ...do something... */ free(ptr)。錯誤示例:下列代碼進(jìn)行內(nèi)存分配時,沒有對內(nèi)存大小整數(shù)作合法性校驗(yàn)。確保x為整數(shù)后才申請內(nèi)存,否則視為參數(shù)無效,不予申請,以避免出現(xiàn)申請過大內(nèi)存而導(dǎo)致拒絕服務(wù)。 ++i) { y[i]=i。void Compliant (){ char str[] = this is a string。 i len。 if (ptr == NULL) return。}6 禁用不
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1