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

正文內(nèi)容

移動(dòng)代碼安全ppt課件-資料下載頁(yè)

2025-01-09 20:52本頁(yè)面
  

【正文】 把類 、 方法和變量聲明為公有會(huì)給攻擊者提供潛在的入口 。 為此: (a) 不要使用公共域或變量 , 把它們聲明為私有的 , 并提供訪問(wèn)函數(shù)以限制對(duì)它們的訪問(wèn);(b) 除非有很好的理由 , 否則把方法都設(shè)為私有的 (如果確實(shí)沒(méi)這樣做 , 說(shuō)清楚其理由 )。 非私有的方法可能會(huì)接收受污染的數(shù)據(jù) , 因此必須保護(hù)這些方法 (除非已經(jīng)用其它方式對(duì)它們進(jìn)行了保護(hù) )。 第 13章 移動(dòng)代碼安全 2) 避免使用靜態(tài)域變量 靜態(tài)域變量是附著在類而非類的實(shí)例上 , 而類可以被其它類所定位 , 其結(jié)果就是可以通過(guò)其它類找到靜態(tài)域變量 , 這就很難保證它們的安全 。 3) 永遠(yuǎn)不要把可變對(duì)象返回給潛在的有惡意代碼(因?yàn)榇a可能會(huì)改變它 ) 注意 , 數(shù)組是可變的 (即使數(shù)組的內(nèi)容不可變 ), 所以不要返回一個(gè)含有敏感數(shù)據(jù)的內(nèi)部數(shù)組的引用 。 第 13章 移動(dòng)代碼安全 4) 永遠(yuǎn)不要直接保存用戶給定的可變對(duì)象 (包括對(duì)象的數(shù)組 ) 如果直接保存用戶給定的可變對(duì)象 , 用戶可以把對(duì)象交給安全代碼 , 讓安全代碼 “ 檢查 ” 對(duì)象 , 并在安全代碼試圖使用數(shù)據(jù)時(shí)改變數(shù)據(jù) 。 應(yīng)該在內(nèi)部存儲(chǔ)數(shù)組前復(fù)制它們 , 而且要小心 (例如 , 警惕用戶編寫的復(fù)制例程 )。 第 13章 移動(dòng)代碼安全 5) 不要依賴于初始化 許多 Java開發(fā)人員認(rèn)為如果不運(yùn)行構(gòu)建器就無(wú)法為一個(gè)對(duì)象分配內(nèi)存 , 這是不對(duì)的 , 事實(shí)上有許多方法可以為未初始化的對(duì)象分配內(nèi)存 。 避免這個(gè)問(wèn)題的一個(gè)簡(jiǎn)單方法就是書寫自己的類 , 從而在對(duì)象進(jìn)行某項(xiàng)操作前驗(yàn)證對(duì)象 。 其做法為 ● 使所有的變量為私有 。 如果要允許外部代碼訪問(wèn)一個(gè)對(duì)象內(nèi)的變量 , 可以通過(guò) set和 get方法來(lái)實(shí)現(xiàn) (這就使外部代碼不能訪問(wèn)未初始化的對(duì)象 )。 第 13章 移動(dòng)代碼安全 ● 為每一個(gè)對(duì)象添加一個(gè)新的私有布爾變量initialized。 ● 在返回之前讓每一個(gè)構(gòu)建器設(shè)置初始化的變量作為最后一個(gè)操作 。 ● 在進(jìn)行進(jìn)一步操作之前,讓每一個(gè)nonconstructor方法驗(yàn)證 initialized為真。 第 13章 移動(dòng)代碼安全 如果自己書寫的類具有靜態(tài)的初始化程序 , 則需要在類的層次做同樣的操作 。 也就是說(shuō) , 對(duì)于任何一個(gè)具有靜態(tài)初始化程序的類 , 需要: ● 使所有的靜態(tài)變量私有 。 如果要允許外部代碼訪問(wèn)類中的靜態(tài)變量 , 可以通過(guò)靜態(tài) set和 get方法來(lái)實(shí)現(xiàn) (這就使外部代碼不能訪問(wèn)未初始化的靜態(tài)變量 )。 第 13章 移動(dòng)代碼安全 ● 為類添加一個(gè)新的私有靜態(tài)布爾變量classInitialized。 ● 在返回之前讓靜態(tài)構(gòu)建器設(shè)置初始化的變量作為最后一步操作 。 ● 在進(jìn)行進(jìn)一步操作之前 , 讓每一個(gè)靜態(tài)方法和每一個(gè)構(gòu)建器驗(yàn)證 classInitialized為真 。 第 13章 移動(dòng)代碼安全 6) 除非有很好的理由 , 否則使每件事都 final(終結(jié) ) 如果某個(gè)類或方法不是 final的 , 攻擊者就可以用某種危險(xiǎn)且無(wú)法預(yù)知的方法來(lái)擴(kuò)展它 。 注意 , 作為安全性的交換 , 這會(huì)帶來(lái)可擴(kuò)展性的喪失 。 7) 不要在安全性上依賴包的范圍 在同一個(gè)包內(nèi)可以訪問(wèn)沒(méi)有明確標(biāo)記為 public、private或 protected的類 、 方法和變量 。 Java類不是關(guān)閉的 , 因此 , 攻擊者可以向包中引入一個(gè)新類 , 并用此新類來(lái)訪問(wèn)用戶以為保護(hù)了的信息 。 (某些類 , 如, 缺省是關(guān)閉的 , 而且某些 Java虛擬機(jī) (JVM)會(huì)讓用戶關(guān)閉其它包 , 但最好假設(shè)包不是關(guān)閉的 。 ) 第 13章 移動(dòng)代碼安全 8) 不要使用內(nèi)部類 有些 Java語(yǔ)言的書上稱只有封裝內(nèi)部類的類才可以訪問(wèn)被封裝的內(nèi)部類 , 這是不正確的 , 因?yàn)?Java字節(jié)碼沒(méi)有內(nèi)部類的概念 , 在內(nèi)部類轉(zhuǎn)換為字節(jié)代碼時(shí) ,會(huì)被轉(zhuǎn)換為這個(gè)包中任意代碼可以訪問(wèn)的類 。 更糟的是 , 被封裝類的私有域會(huì)靜悄悄地變成非私有的 , 從而允許內(nèi)部類訪問(wèn) ! 第 13章 移動(dòng)代碼安全 9) 最小化特權(quán)和避免標(biāo)記代碼 運(yùn)行沒(méi)有標(biāo)記的代碼不需要任何專門的特權(quán) 。 沒(méi)有專門特權(quán)的代碼不會(huì)帶來(lái)什么危害 , 為此應(yīng)避免標(biāo)記代碼 。 但是有時(shí)代碼需要獲得和使用特權(quán)以執(zhí)行某種危險(xiǎn)的操作 , 此時(shí)應(yīng)使代碼特權(quán)最小化 , 同時(shí)應(yīng)更仔細(xì)地審閱特權(quán)代碼 。 第 13章 移動(dòng)代碼安全 10) 如果一定要標(biāo)記代碼 , 應(yīng)該把它們都放在一個(gè)檔案文件里 此規(guī)則的目的是防止攻擊者使用混合匹配攻擊 。在混合匹配攻擊中 , 攻擊者構(gòu)建新 Applet或庫(kù) , 把某些標(biāo)記類與有惡意的類連接在一起 , 或把根本意識(shí)不到會(huì)被一起使用的標(biāo)記類連接在一起 。 通過(guò)把一組類標(biāo)記在一起 , 就可以使這種攻擊更高明 。 現(xiàn)有的代碼標(biāo)記系統(tǒng)在防止混合匹配攻擊上做得還不夠 , 所以這一規(guī)則還不能完全防止此類攻擊 。 但使用單個(gè)檔案沒(méi)什么壞處 。 第 13章 移動(dòng)代碼安全 11) 使類不可被復(fù)制 Java的類復(fù)制機(jī)制允許攻擊者不運(yùn)行構(gòu)建函數(shù)就實(shí)例化某個(gè)類 。 只要在每個(gè)類里定義如下方法就可使類不可被復(fù)制: public final void clone() throws { throw new ()。 } 第 13章 移動(dòng)代碼安全 如果確實(shí)需要使類可被復(fù)制 , 那么可以采用幾個(gè)保護(hù)措施來(lái)防止攻擊者重新定義復(fù)制方法 。 如果定義了自己的復(fù)制方法 , 就使它 final;如果不是 , 至少可以通過(guò)增加如下內(nèi)容來(lái)防止復(fù)制方法被惡意地重載: public final void clone() throws { ()。 } 第 13章 移動(dòng)代碼安全 12) 使類不可順序化 順序化可以使攻擊者看到對(duì)象的內(nèi)部狀態(tài) , 甚至私有部分 。 攻擊者將對(duì)象順序化為可以讀的字節(jié)數(shù)組 ,這就使得他可以檢查對(duì)象所有的內(nèi)部狀態(tài) , 包括標(biāo)記為私有的域和引用對(duì)象的內(nèi)部狀態(tài) 。 要防止這一點(diǎn) ,需要在類里增加如下方法實(shí)現(xiàn)對(duì)象的不可順序化 (定義成 final方法是為了使攻擊者不能重載被攻擊者定義的子類 ): 第 13章 移動(dòng)代碼安全 private final void writeObject(ObjectOutputStream out) throws { throw new (Object cannot be serialized)。 } 在順序化沒(méi)問(wèn)題的情況下 , 也應(yīng)該對(duì)包含直接處理系統(tǒng)資源的域和包含與地址空間有關(guān)信息的域使用臨時(shí)關(guān)鍵字 。 否則 , 解除類的順序化就會(huì)造成不適當(dāng)?shù)脑L問(wèn) (可能還需要把敏感信息標(biāo)識(shí)為臨時(shí)的 )。 第 13章 移動(dòng)代碼安全 如果對(duì)類定義了自己的順序化方法,就不應(yīng)該把內(nèi)部數(shù)組傳遞給需要數(shù)組的 DataInput/DataOuput方法。其理由在于:所有的 DataInput/DataOuput方法都可以被重載。如果某個(gè)可順序化的類向某個(gè)DataOutput(write(byte [] b))方法直接傳遞了一個(gè)私有數(shù)組,那么攻擊者就可以構(gòu)建子類 ObjectOutputStream并重載 write(byte [] b)方法,從而可以訪問(wèn)并修改那個(gè)私有數(shù)組。注意,缺省的順序化并沒(méi)有把私有字節(jié)數(shù)組域暴露給 DataInput/ DataOutput字節(jié)數(shù)組方法 。 第 13章 移動(dòng)代碼安全 13) 使類不可被解順序化 即使類不可被順序化 , 它依然可以被解順序化 。攻擊者可以構(gòu)建一個(gè)字節(jié)序列 , 使它碰巧可以解順序化為某個(gè)類實(shí)例 , 而且具有攻擊者選定的值 。 換句話說(shuō) , 解順序化是一種公共的構(gòu)建函數(shù) , 允許攻擊者選擇對(duì)象的狀態(tài) ——顯然這是一個(gè)危險(xiǎn)的操作 ! 要防止這一點(diǎn)就需要防止能將一字節(jié)流解順序化為類的一個(gè)實(shí)例 , 這可通過(guò)聲明 readObject方法來(lái)實(shí)現(xiàn): 第 13章 移動(dòng)代碼安全 private final void readObject(ObjectInputStream in) throws { throw new (Class cannot be deserialized)。 } 第 13章 移動(dòng)代碼安全 14) 不要通過(guò)名稱來(lái)比較類 在 Java中可以使用同一名字表示不同的類 , 這樣 ,攻擊者可以用相同的名稱定義類 , 同時(shí)可能會(huì)給這些類賦予不恰當(dāng)?shù)臋?quán)限 , 因此 , 不要使用名字來(lái)比較類 。下面是一個(gè)判斷某個(gè)對(duì)象是否含有某個(gè)給定類的錯(cuò)誤方式: if (().getName().equals(Foo)) { 第 13章 移動(dòng)代碼安全 如果確實(shí)需要判斷某個(gè)對(duì)象是否含有某個(gè)給定類名 , 則需要嚴(yán)格按照規(guī)范并確保使用當(dāng)前名字空間 (當(dāng)前類的 ClassLoader所在名稱空間 )。 因此 , 應(yīng)該使用如下形式: if (() == ().loadClass(Foo)) { 如果要判斷兩個(gè)對(duì)象是否含有完全相同的類 , 最好采用直接比較類對(duì)象的方法 , 即使用如下形式: if (() == ()) { 第 13章 移動(dòng)代碼安全 15) 不要把秘密 (密鑰 、 密碼或算法 )存儲(chǔ)在代碼或數(shù)據(jù)里 惡意 JVM可以迅速看到這些秘密 。 打亂代碼并不能在高明的攻擊者面前真正隱藏代碼 。
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1