2013-01-08 72 views
9

Java供應商和社區說「Java比其他語言更安全」。但我想知道如何?與其他編程語言相比,爲什麼Java更安全?

如果我們看Java和.Net中的編程,它們看起來很相似。

步驟涉及.NET編程Click to know more

  1. 寫.NET程序。編譯將您的源代碼翻譯成Microsoft中間語言(MSIL)並生成所需的元數據。)編譯您的代碼到MSIL(編譯將您的源代碼翻譯成Microsoft中間語言(MSIL)並生成所需的元數據)。 (在執行時,即時(JIT)編譯器將MSIL轉換爲本地代碼。在此編譯過程中,代碼必須通過驗證過程,檢查MSIL和元數據才能找到判斷代碼是否可以被確定爲類型安全的)。
  2. 運行代碼(公共語言運行時提供了可以執行的基礎結構和可在執行期間使用的服務)。

步驟涉及Java編程Click to know more

  1. 寫Java程序
  2. 編譯Java程序(Java編譯器轉換成Java源代碼的.class文件是一個字節代碼)
  3. 程序通過JVM加載到內存中(JVM加載s .class文件到內存中進行字節碼驗證並以機器語言轉換.clsss文件)
  4. 執行Java程序(無論我們在Java程序中寫入什麼動作,JVM都通過解釋字節碼來執行它們。如果我們談論舊的JVM,它們很慢,一次執行並解釋一個字節碼。現代JVM使用JIT編譯單元,我們甚至稱之爲即時編譯)。

如果我們看這兩種語言的步驟幾乎相同,那麼「爲什麼Java比其他語言更安全?」

+6

引用參考文獻也是在哪裏閱讀的。 – Azodious

+0

現在我腦海中的一個觸發點是,在.net中,您仍然可以編寫「不受管理的代碼」,這種代碼在Java中不會運行在CLR之上,而只會在JRE之上運行。 – Dharmavir

+0

是的,引用(或鏈接)將有助於他人理解爲什麼人聲稱。 – Dharmavir

回答

11

有很多原因,Java是一種安全語言,它絕對比一些語言更安全,但我認爲這是一個誇張地說,它比安全的所有其他語言。

的Java已制定了各種安全特性:引用的

  1. 自動空檢查,數組邊界檢查,鑄件的驗證等,以防止程序使類型錯誤。將此與C或C++進行比較,其中這些相同的錯誤(有一些例外)會導致未定義的行爲。

  2. 執行前驗證字節碼。這使得程序不可能跳轉到未定義的指令,或嘗試對不存在的對象執行操作,或者在指令級別發生類型錯誤等。將其與C或程序集進行比較,程序可以在此處跳到錯誤的指令,或嘗試讀取不存在的參數到功能(想想va_args)等)

  3. 在新代碼中加載時運行時安全檢查。使用SecurityManagerClassLoader可以使Java運行時輕鬆地阻止任意代碼在計算機上執行,方法是調用對系統資源的訪問並防止程序在運行時加載或生成任意代碼。將它與可以讀寫任意值的C或C++進行比較,發出任意系統調用,生成並執行任意代碼等。

  4. 某些功能的庫級安全性。例如,String是不可變的,並且final,因此接收String的函數可以驗證字符串,而不必擔心另一個線程更改其值。

這不是Java安全功能的完整列表,但它應該讓您瞭解Java中不存在的其他語言中的一些設計注意事項。

希望這會有所幫助!

+0

如果[你感覺邪惡](http://codegolf.stackexchange.com/a/20675/11333),你可以改變字符串在Java中,所以點4是不正確的。當你按照慣常的方式做事時,它肯定會執行它,但會給你一種虛假的安全感。 –

+0

@TimS。如果安裝了適當的安全管理,該代碼會觸發安全異常並失敗。 – templatetypedef

3

你提到你看了一些地方,但可以請你重新閱讀它,因爲我想,當它被寫作者會在JAVA被C比較++/Fortran語言/ C等

也有一個老後,您可以在http://www.veracode.com/blog/2010/06/which-tastes-better-for-security-java-or-net/

閱讀有關安全性的可測性,你可以看到兩個相同幾乎....

+4

是的,我們從來不知道,他們可能意味着PHP太.. :) – Dharmavir

+0

修改了問題,並添加了鏈接。 –

+0

感謝Dharmavir ......你是Gaurang Gajjar的朋友嗎? –

2

Java或.NET程序,相比於C和喜歡,是不是受到了一些簡單的安全漏洞的類型 - 緩衝區溢出或格式字符串錯誤。

雖然這樣做可以避免一些可以獲得遠程代碼執行的方式,但Java沒有做任何事情來阻止任何Web應用程序漏洞。它也無助於邏輯錯誤。

+0

答案仍然是「這不是比其他語言更安全,包括.Net」,你一直誤導。 –

相關問題