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

正文內(nèi)容

移動(dòng)代碼安全ppt課件(編輯修改稿)

2025-02-05 20:52 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 代碼安全 2) 通過(guò)明確定義獲得安全 Java語(yǔ)言的定義非常嚴(yán)格: ● 保證所有的基本類型使用指定的長(zhǎng)度; ● 所有的操作必須按指定的順序執(zhí)行 。 明確的定義可以保證兩個(gè) (正確的 )Java編譯器執(zhí)行同一個(gè)程序不會(huì)得到兩個(gè)不同的結(jié)果 。 第 13章 移動(dòng)代碼安全 3) 通過(guò)摒棄指針獲得安全 Java摒棄了 C語(yǔ)言中的指針?biāo)惴?, 因此編程人員無(wú)法偽造指針來(lái)訪問(wèn)內(nèi)存 。 對(duì)類文件中所有方法和實(shí)例變量的引用都是通過(guò)符號(hào)名來(lái)實(shí)現(xiàn)的 , 這就可以避免在 C語(yǔ)言中利用指針?lè)欠ㄔL問(wèn)內(nèi)存而提升權(quán)限一類的攻擊 , 如緩沖區(qū)溢出等 。 第 13章 移動(dòng)代碼安全 4) 通過(guò)垃圾收集獲得安全 在 C/C++中 , 編程人員經(jīng)常面對(duì)的問(wèn)題是內(nèi)存分配和釋放 。 當(dāng)釋放內(nèi)存不當(dāng) , 如沒(méi)有釋放不再使用的內(nèi)存或兩次釋放同一內(nèi)存區(qū)會(huì)導(dǎo)致安全問(wèn)題 。 Java通過(guò)自動(dòng)垃圾收集 (周期性地釋放沒(méi)有被引用的內(nèi)存 )來(lái)避免這些問(wèn)題 。 第 13章 移動(dòng)代碼安全 5) 通過(guò)在編譯時(shí)的嚴(yán)格檢查獲得安全 Java編譯器在編譯時(shí)要進(jìn)行詳盡的 、 嚴(yán)格的檢查以盡可能地檢測(cè)編程中的錯(cuò)誤 。 Java語(yǔ)言是強(qiáng)類型的: ● 在運(yùn)行期 , 如果不進(jìn)行明確的檢查不能把對(duì)象分配給某個(gè)子類; ● 要檢查所有對(duì)方法和變量的引用以確保對(duì)象具有合適的類型 。 ● 整數(shù)不能轉(zhuǎn)換為對(duì)象 , 對(duì)象也不能轉(zhuǎn)換為整數(shù) 。 編譯器還要確保程序沒(méi)有訪問(wèn)未初始化的本地變量 。 第 13章 移動(dòng)代碼安全 2. 類文件驗(yàn)證 雖然編譯器可對(duì)類型進(jìn)行詳盡的檢查 , 但攻擊者仍然可能通過(guò)使用專門的編譯器實(shí)現(xiàn)攻擊 。 如 HotJava瀏覽器是下載已經(jīng)編譯好的類文件 , 它無(wú)法確定下載的字節(jié)碼是由可信的 Java編譯器編譯的還是由某個(gè)有惡意企圖的編譯器編譯的 。 第 13章 移動(dòng)代碼安全 在編譯時(shí)實(shí)現(xiàn)對(duì)類型的檢查還存在版本不一致的問(wèn)題。如用戶編譯好了一個(gè)類,假設(shè) PurchaseStockOptions是 TradingClass的一個(gè)子類。但是在類編譯完后, TradingClass的定義可能會(huì)發(fā)生變化:某個(gè)方法不用了或方法的參數(shù)改變了;變量類型變了。而且,方法或變量也可能從公有變成私有。 為此 , 所有外來(lái)的類文件都需要經(jīng)過(guò)一個(gè)驗(yàn)證器 ,由驗(yàn)證器確保類文件具有正確的格式 。 第 13章 移動(dòng)代碼安全 字節(jié)碼驗(yàn)證器同樣可以增強(qiáng)解釋器的性能 。 利用字節(jié)碼驗(yàn)證 , 解釋器就不用對(duì)每一條解釋的指令進(jìn)行檢查 , 而會(huì)認(rèn)為這些檢查都已經(jīng)在此之前完成了 。 如解釋器能肯定代碼遵守以下限制: ● 代碼中不存在緩沖區(qū)溢出; ● 所有的寄存器訪問(wèn)和存儲(chǔ)都是合法的; ● 所有字節(jié)碼的參數(shù)都是正確的; ● 不存在非法的數(shù)據(jù)轉(zhuǎn)換 。 第 13章 移動(dòng)代碼安全 驗(yàn)證器獨(dú)立于 Java編譯器 , 它使用戶可以放心的從防火墻之外下載 Java代碼 。 下面詳細(xì)介紹驗(yàn)證器的驗(yàn)證過(guò)程 , 其中提到的類文件格式的具體細(xì)節(jié)可參考參考資料 [5]: (1) 驗(yàn)證的第一步發(fā)生在將類讀入解釋器時(shí) 。 這一步要確保類文件具有類文件的格式:開(kāi)始的幾個(gè)字節(jié)必須包含正確的魔幻數(shù);所有可驗(yàn)證的屬性都具有正確的長(zhǎng)度;類文件的末尾不能被截?cái)?, 也不能添加額外的字節(jié);常數(shù)存儲(chǔ)庫(kù)不能包含不可識(shí)別的信息 。 第 13章 移動(dòng)代碼安全 (2) 第二步更進(jìn)一步驗(yàn)證類文件的格式: ● 確保 final類沒(méi)有被繼承 , final方法沒(méi)有被覆蓋; ● 每個(gè)類必須有一個(gè)超類; ● 確保常數(shù)存儲(chǔ)庫(kù)滿足一定的限制 , 如其中的類引用必須包含一個(gè)指向存儲(chǔ)庫(kù)中的一個(gè) unicode字符串引用的域 。 ● 常數(shù)存儲(chǔ)庫(kù)中所有的域引用和方法引用都必須有合法的名字 、 合法的類和合法的類型簽名 。 第 13章 移動(dòng)代碼安全 (3) 這一步是類驗(yàn)證中最復(fù)雜的一步 , 在這一步中需要驗(yàn)證每一個(gè)方法的字節(jié)碼 。 這一步要保證: ● 堆棧的大小和它包含的對(duì)象類型保持不變; ● 除非已知包含了一個(gè)適當(dāng)類型的值 , 否則不能訪問(wèn)寄存器; ● 以適當(dāng)?shù)膮?shù)調(diào)用方法; ● 以適當(dāng)類型的值修改域; ● 所有的操作碼在堆棧和寄存器中具有適當(dāng)類型的參數(shù) 。 在 “ 字節(jié)碼驗(yàn)證 ” 中我們將進(jìn)一步描述這一步的細(xì)節(jié) 。 第 13章 移動(dòng)代碼安全 (4) 在第三步中 , 除非有必要 , 否則不會(huì)裝載類文件 。 如一個(gè)方法調(diào)用另一個(gè)返回 foobarType類型對(duì)象的方法時(shí) , 如果立即把同一類型的域分配給返回的對(duì)象 ,驗(yàn)證器就不會(huì)驗(yàn)證 foobarType類型是否存在;如果把a(bǔ)notherType類型的域分配給返回的對(duì)象 , 則必須裝載foobarType和 anotherType的定義以確保 foobarType是anotherType的一個(gè)子類 。 引用類的指令第一次執(zhí)行時(shí) , 驗(yàn)證器需: 第 13章 移動(dòng)代碼安全 ● 如果還沒(méi)有裝載這個(gè)類則裝載; ● 驗(yàn)證當(dāng)前正在執(zhí)行的類是否被允許引用給定的類 。 指令第一次調(diào)用方法或訪問(wèn) 、 修改域時(shí) , 驗(yàn)證器需: ● 確保方法或域存在于給定的類中; ● 檢查方法或域是否具有要求的簽名; ● 檢查當(dāng)前正在執(zhí)行的方法是否有權(quán)訪問(wèn)給定的方法或域。 第 13章 移動(dòng)代碼安全 這一步中 , 驗(yàn)證器不需要檢查堆棧中對(duì)象的類型 ,因?yàn)樵诘谌街幸呀?jīng)執(zhí)行了這項(xiàng)檢查 。 在執(zhí)行完驗(yàn)證后 , 字節(jié)碼流中的指令就會(huì)被另一種形式的指令所代替 。 如操作碼 new被 new_quick代替 。這個(gè)替換的指令表示已經(jīng)執(zhí)行了對(duì)這個(gè)指令的驗(yàn)證 ,不需要再次驗(yàn)證了 。 第 13章 移動(dòng)代碼安全 3. 字節(jié)碼驗(yàn)證 類文件驗(yàn)證的第三步是字節(jié)碼驗(yàn)證 , 這是類文件驗(yàn)證過(guò)程中最復(fù)雜的一步 。 首先 , 把組成虛指令的字節(jié)分成一系列的指令 , 每一個(gè)指令開(kāi)始位置的偏移量保存在一個(gè)位表中 。 然后 , 驗(yàn)證器再次掃描這些字節(jié)并解析指令 。 這一步中把每個(gè)指令轉(zhuǎn)換成一個(gè)結(jié)構(gòu) 。檢查每個(gè)指令的參數(shù) (如果有的話 )以確保它們是合理的: ● 所有的流程控制指令必須到達(dá)一個(gè)指令的開(kāi)始 ,不允許有到達(dá)指令內(nèi)部的分支 。 類似的 , 不允許出現(xiàn)到達(dá)代碼開(kāi)始前或代碼結(jié)束后的分支 。 第 13章 移動(dòng)代碼安全 ● 所有的寄存器引用必須是引用合法的寄存器 。除方法指明的所能用的寄存器外 , 代碼不能訪問(wèn)和修改任何其它的寄存器 。 ● 所有對(duì)常數(shù)存儲(chǔ)庫(kù)的引用必須是引用適當(dāng)類型的條目 。 如操作碼 ldc1只能用于整數(shù) 、 浮點(diǎn)數(shù)或 string類型 , 而操作碼 getfield必須引用一個(gè)域 。 ● 代碼不能在某個(gè)指令中間結(jié)束 。 ● 對(duì)每一個(gè)異常處理程序 , 其起始點(diǎn)和結(jié)束點(diǎn)都必須指向一個(gè)指令的開(kāi)始 。 異常處理器的偏移必須是合法的指令;起始點(diǎn)必須在結(jié)束點(diǎn)之前 。 第 13章 移動(dòng)代碼安全 對(duì)每一條指令 , 在執(zhí)行之前 , 驗(yàn)證器要跟蹤堆棧和寄存器的內(nèi)容 。 對(duì)于堆棧 , 需要知道堆棧的長(zhǎng)度和堆棧中元素的類型;對(duì)于寄存器 , 需要知道寄存器內(nèi)容的類型或寄存器內(nèi)的值是合法的 。 在確定堆棧中值的類型時(shí) , 字節(jié)碼驗(yàn)證器不需要區(qū)分不同的整數(shù)類型(如 byte、 short和 char)。 接下來(lái)初始化數(shù)據(jù)流分析器 。 對(duì)于第一條指令 ,編號(hào)較小的寄存器包含方法類型簽名所指示的類型;堆棧為空;所有其它的寄存器包含非法值;對(duì)于其它指令 , 指示該指令沒(méi)有被訪問(wèn) , 還沒(méi)有其堆?;蚣拇嫫鞯男畔?。 第 13章 移動(dòng)代碼安全 最后 , 運(yùn)行數(shù)據(jù)流分析器 。 對(duì)每一條指令都有一個(gè)“ changed”位來(lái)表示這個(gè)指令是否需要查看 。 最初只有第一條指令設(shè)置了 “ changed”位 。 數(shù)據(jù)流分析器執(zhí)行如下循環(huán): (1) 找到一個(gè)設(shè)置了 “ changed”位的虛擬機(jī)器指令 ,如果沒(méi)有找到 , 則表示該方法已被驗(yàn)證 。 清 “ changed”位 。 (2) 仿真指令對(duì)堆棧和寄存器的影響: ● 如果指令要使用來(lái)自堆棧的值 , 需確保堆棧中有足夠的元素 , 并且堆棧頂端元素具有適當(dāng)?shù)念愋?, 否則 ,驗(yàn)證失敗 。 第 13章 移動(dòng)代碼安全 ● 如果指令使用了寄存器 , 需確保指定的寄存器包含了適當(dāng)類型的值 , 否則 , 驗(yàn)證失敗 。 ● 如果指令要把值壓入堆棧 , 往堆棧頂端加入指示的類型 , 需確保堆棧有足夠的空間存放新元素 。 ● 如果指令需要修改寄存器 , 需說(shuō)明寄存器當(dāng)前包含了新的類型 。 第 13章 移動(dòng)代碼安全 (3) 確定跟隨在當(dāng)前指令后面的虛擬機(jī)器指令 。 后續(xù)指令可能是: ● 如果當(dāng)前指令不是無(wú)條件 goto、 return或 throw,則為下一條指令;如果可以離開(kāi)最后一條指令 , 則這一步失敗 。 ● 有條件或無(wú)條件轉(zhuǎn)移的目標(biāo) 。 ● 當(dāng)前指令所有的異常處理程序 。 第 13章 移動(dòng)代碼安全 (4) 在當(dāng)前指令的末尾 , 把堆棧和寄存器的狀態(tài)合并到下一條指令中 。 在異常處理的情況下 , 需要更改堆棧使得堆棧包含一個(gè)單一的對(duì)象 , 其異常類型由異常處理器信息指明 。 ● 如果下一條指令是第一次訪問(wèn) , 則在執(zhí)行下一條指令之前指明:由第 (2)步和第
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1