国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

JAVA的安全結構

2019-11-18 12:22:14
字體:
來源:轉載
供稿:網友

   java的安全模型不同于傳統的安全方法,傳統的安全方法中,大多數操作系統答應應用程序充分訪問系統資源,在操作系統不提供安全保護的機器里,運行環境不能被信任。為了彌補這個缺陷,安全策略經常要求在應用程序執行之前對應用程序建立信任,例如要求程序員在執行從網上獲得的應用程序前,先檢查病毒和源代碼中不安全的代碼。這種方法有2個問題:(1)確定程序是否安全的檢查很復雜很浪費時間,很少有程序員愿意花時間讀程序的源代碼,然后再將它編譯成本地機器碼以保證程序是安全的。(2)病毒檢查要不斷維護以保證有效性。
  
    JAVA的安全模型是不同的,為了防止用戶系統受到通過網絡下載的不安全程序的破壞,JAVA提供了1個自定義的可以在里面運行JAVA程序的“沙盒”。JAVA的安全模型使得JAVA成為適合于網絡環境的技術。JAVA的安全性答應用戶從Internet或Intranet上引入或運行applet,applet的行動被限制于它的“沙盒”,applet可以在沙盒里做任何事情,但不能讀或修改沙盒外的任何數據,沙盒可以禁止不安全程序的很多活動,如:
    1.對硬盤進行讀寫。
    2.和別的主機(不包括程序所在的主機)進行網絡連接。
    3.創建1個新過程。
    4.載入1個新的動態庫并直接調用本地方法。
  
    “沙盒”模型的思想是在信任的環境中運行不信任的代碼,這樣即使用戶不小心引入了不安全的applet,applet也不會對系統造成破壞。
  
  1 “沙盒”模型
  
    “沙盒”安全模型是內建于JAVA結構的,它主要由以下幾部分構成:
    1.內建于JAVA虛擬機和語言的安全特性。
    2.類的載入結構。
    3.類文件校驗器。
    4.安全治理器和JAVA API。
  
    下面分別進行闡述。
  
    1.1 內建于JAVA虛擬機和語言的安全特性
  
    JAVA語言有一些機制使得JAVA程序很穩健,這些機制也是JAVA虛擬機(JVM)的特點,它們是:
  
    1.安全的類型轉換。在C、C++中,可以通過指針進行任意的類型轉換,但經常帶來不安全性,而在JAVA中,運行時系統對對象的處理要進行類型相容性檢查,以防止不安全的轉換。
  
    2.沒有指針。指針是C和C++中最靈活、也最輕易產生錯誤的數據類型。由指針所進行的內存地址操作常會造成不可預知的錯誤,同時通過指針對某個內存地址進行顯示類型轉換后,可以訪問1個C++中的私有成員,從而破壞安全性,造成系統的崩潰。而JAVA對指針進行完全的控制,程序員不能直接進行任何指針操作。
  
    3.自動的垃圾收集。在C中,程序員通過庫函數malloc()和free()來分配和釋放內存,C++中則通過運算符new和delete來分配和釋放內存。再次釋放已釋放的內存塊或未被分配的內存塊,會造成系統的崩潰;同樣,忘記釋放不再使用的內存塊也會逐漸耗盡系統資源。而在JAVA中,所有的數據結構都是對象,通過運算符new為它們分配內存堆。通過new得到對象的處理權,而實際分配給對象的內存可能隨程序運行而改變,JAVA對此自動進行治理并且進行垃圾收集,有效地防止了由于程序員的誤操作而導致的錯誤,并且更好地利用了系統資源。
  
    4.數組界限檢查。若程序中有數組訪問,JVM就會檢查數組訪問是否越界,從而防止了由數組越界引起的錯誤。
  
    5.檢查null引用。若使用的引用為null,JVM就會拋出1個例外。
  
  
  
    1.2 類載入器結構
  
    類載入器結構在沙盒模型中起了重要作用。在虛擬機中,類載入器負責引入、定義運行程序的類和接口的二進制數據。在虛擬機中可能有不止1個類載入器。
  
    1個JAVA程序能使用2種類型的類載入器:原始的類載入器和類載入器對象。原始的類載入器是JVM實現的1部分,它通常從本地硬盤載入安全的類,包括JAVA API的類。運行時,JAVA應用程序安裝類載入器對象,類載入器對象使用JAVA語言編寫,編譯成類文件后,載入到虛擬機,像其他的對象一樣初始化。類載入器對象用于以自定義的方式載入類,例如通過網絡下載類文件。JVM把通過原始的類載入器載入的任何類都視為安全的,無論這個類是否是JAVA API的1部分。而將通過類載入器對象載入的類視為可懷疑的,缺省情況下視為不安全的。
  
    JAVA的結構可以在1個應用程序中創建多個命名空間,命名空間是由1個特定的類載入器載入的類名的集合。JVM為每1個類載入器維持1個命名空間,這個命名空間里有由那個類載入器載入的所有類的名字。由不同類載入器載入的類在不同的命名空間里,沒有程序的直接答應,這些類不能彼此訪問。編寫程序時,可以將來源不同的類放在不同的命名空間里,用這種方式,就可以使用JAVA的類載入器結構控制來源不同的代碼間的相互作用,就可以防止不安全代碼訪問、破壞安全代碼。對于Applet,也是同樣的道理,通過將來源不同的Applet類文件放在不同的命名空間,防止不安全代碼破壞安全代碼。
  
    在“沙盒”結構中,類載入器結構是防止不安全代碼的第一道圍墻,它的作用主要有2方面:
    1.防止不安全代碼訪問、破壞安全代碼。
    2.防止不安全代碼冒充安全的類。
  
    這2方面作用是通過下述方法實現的:
  
    1.將代碼分放在多個命名空間中,并在不同命名空間的代碼之間設置“屏障”。類載入器結構是通過命名空間來防止不安全代碼訪問、破壞安全代碼。命名空間在載入到不同命名空間中的類之間設置了1個“屏障”。在JVM中,同一命名空間中的類可以直接相互作用,不同命名空間中的類甚至不能檢測到對方的存在,除非程序答應它們相互作用。
  
    2.保護可信任類庫(像JAVA API)的邊界。假如類載入器載入1個類,這個類用它的名字來冒充是JAVA API的1部分(例如,類名為java.lang.virus),類載入器就傳遞請求給原始類載入器,假如原始類載入器不能載入這個類,類載入器就拋出安全例外,并拒絕載入這個類。
  
    1.3 類文件校驗器
  
    每一個JVM都有1個類文件校驗器,用來保證載入的類文件具有正確的內部結構。假如類文件校驗器發現類文件有錯誤,它就拋出1個例外。
  
    類文件校驗器能幫助檢查出類使用起來是否安全。因為類文件是由二進制數據構成的,JVM不知道這個類文件是否是由黑客產生的,是否有可能破壞虛擬機的完整性,所以虛擬機對引入的字節碼進行校驗是很重要的。類文件校驗器校驗的過程可以分為2個階段:階段1發生在類剛載入以后,類文件校驗器檢查類文件的內部結構,包括校驗所含的字節碼的完整性;階段2發生在字節碼執行的時候,字節碼校驗器確定符號引用的類、域和方法是否存在。
  
    1.3.1內部檢查
  
    在階段1,類文件校驗器檢查類文件是否正確組成、內部是否一致、是否遵循JAVA編程語言的限制、含有的字節碼是否能由JVM安全執行,假如類文件校驗器檢查出錯誤,它就會拋出1個錯誤,類文件就不再被程序使用。
  
    1.檢查格式和內部一致性
  
    在階段1,校驗器除了檢查字節碼的完整性,還要檢查類文件的格式和內部一致性。例如,每一個類文件都必須以同樣的4字節數字0xCAFEBASE開頭,這樣類文件校驗器可能檢查的第一件事就是引入的文件是否以0xCAFEBASE開頭。
  
    類文件校驗器還要校驗類文件的長度是否與類文件中所記錄的長度一致,也即校驗類文件是否完整,是否被截去一部分或者被添加。類文件校驗器還要檢查類是否遵循Java語言的規定,如除了Object類,所有的類都必須有1個父類等。
  
    2.字節碼校驗
  
    一旦類文件校驗器成功地完成格式和內部一致性的檢查,就開始對字節碼進行校驗。通過對代表類方法的字節碼流進行數據流分析,進行操作碼是否有效及操作碼是否有有效的操作數等的檢查,以驗證字節碼流是否可以由虛擬機安全執行。
  
    1.3.2符號引用的校驗
  
    符號引用是給出了引用項的名字和其它信息的字符串,這些信息足以用來區分類、域或方法。符號引用的校驗用來驗證引用是否有效,假如引用無效(例如,假如類不能載入,或者類存在但不含有要引用的域或方法),類文件校驗器就會拋出1個錯誤。
  
    1.4 安全治理器和JAVA API
  
    安全治理器定義了“沙盒”的外部邊界。安全治理器是類java.lang.SecurityManager的子類,它是自定義的。
  
    JAVA API類在采取一些行動時,通常需要安全治理器檢查這個行動是否安全,這些行動包括:
    1.接受來自于特定主機的socket連接。
    2.修改線程(改變線程優先級,結束線程等)。
    3.開放對于特定主機的socket連接。
    4.創建1個新的類載入器。
    5.刪除特定的文件。
    6.創建新的過程。
    7.程序退出。
    8.調用含有本地方法的動態庫。
    9.等待連接。
    10.從特定的包載入類。
    11.給特定的包中添加1個新類。
    12.訪問或修改系統特性。
    13.訪問特定的系統特性。
    14.讀文件。
    15.寫文件。
  
    由于在執行上述動作前需要安全治理器進行檢查,JAVA API不執行安全治理器建立的安全措施所禁止的任何動作。
  
    JAVA API執行1個可能不安全活動的過程,通常分為2步:首先,JAVA API代碼檢查安全治理器是否已安裝。假如沒有安裝,就無法進行第2步的檢查,則直接執行可能不安全的代碼;假如安裝了,就繼續執行第2步的檢查,調用安全治理器中合適的檢查方法對動作進行檢查,假如動作被禁止,檢查方法就

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 读书| 儋州市| 博湖县| 乌兰浩特市| 阆中市| 灵武市| 瓮安县| 安图县| 遂平县| 宜阳县| 望城县| 千阳县| 洛隆县| 喀喇沁旗| 鹿邑县| 开化县| 玉山县| 茌平县| 绿春县| 桦川县| 突泉县| 武宣县| 淮安市| 革吉县| 德清县| 丰都县| 屏东县| 夏邑县| 永川市| 宝坻区| 和政县| 汪清县| 思茅市| 全南县| 怀柔区| 德保县| 郯城县| 获嘉县| 勃利县| 邳州市| 绥芬河市|