2010-10-08 95 views
14

我想這是一個普遍的問題,但我正在通過介紹性課程到java(SE/ME)和研究材料聲稱java經常用於「安全目的」。然而,它並沒有解釋它們聲稱java具有良好的安全性。爲什麼Java被標記爲「安全」語言?

這是黑客證明嗎?它是否產生高度穩定的軟件?什麼?

從我的角度來看安全性(目前)是它掌握在編寫代碼的開發者手中,而不是語言本身?

+0

你確定他們不是說「安全」而不是「安全嗎?」這是完全不同的兩件事。 – 2010-10-08 19:28:15

+3

你能包括你的學習材料的報價嗎?只是說'安全'是相當廣泛的沒有更多的上下文。 – 2010-10-08 19:29:25

+0

與講座相關的演講爲Java提供了「安全性」,然後主講者繼續列出了銀行系統,股票市場(納斯達克),智能卡和其他幾個領域的javas使用情況。 – Marcus 2010-10-08 19:38:06

回答

24

恕我直言,這是一個非常令人誤解的聲明。在Java中,您無法訪問超出界限的數組,並且您沒有指針,因此在Java中無法利用堆棧損壞或緩衝區溢出等多個安全漏洞。但是Java本質上並不比其他語言更安全。只是出現可能導致安全漏洞的錯誤的機會較小。實際上,這會減少安全漏洞,但說Java是安全的,這完全是誤導。

+4

通常,當人們說Java是「安全「,這正是你正在陳述的原因 - 無界數組和差指針算術是C代碼中的兩個常見安全錯誤。 – aperkins 2010-10-08 19:28:37

+2

從某種意義上來說,它更安全一些,以降低運行Java VM(沙箱)的系統的機會。 Lie Ryan的看法是,它不會使應用程序本身更安全。即你仍然可以進行SQL注入,如果你自己僞造你的SQL查詢並且不能正確地轉義它,並且類似的「安全性」錯誤 – Tseng 2010-10-08 19:37:43

+1

所以擺脫以前的** **最常見的安全問題原因(緩衝區溢出/溢出)本質上不比C更安全?你在自己的回答中自相矛盾:*「Java本質上不比其他語言更安全」*(錯誤)和*「實際上,這減少了安全漏洞」(正確)。那麼你選擇什麼?它不**,因爲你沒有防範所有安全問題,你不比其他語言更安全。祝你好運逃離VM Lie Ryan;) – SyntaxT3rr0r 2010-10-09 08:32:36

3

因爲Java編譯爲bytecode,然後在Virtual machine內運行,它不能像本地編譯的程序那樣訪問運行的計算機。

+2

這與編譯爲IL並在.net運行時中運行的.net代碼相同。 – 2010-10-08 19:31:40

+2

從技術上講,這是不正確的,因爲您可以使用JNI訪問本機對系統的調用,並且Java程序仍然會對系統造成嚴重破壞 - 刪除文件,執行命令行參數等。 – aperkins 2010-10-08 19:32:41

2

Java被認爲比C更安全的一般原因是因爲它爲您處理內存管理。在其他語言中,程序員分配自己的內存並且經常無法正確執行,導致緩衝區溢出等等。當然,Java VM仍然可以包含相同類型的錯誤,但是隨着時間的推移它會得到很好的測試,不像每個用戶編寫的程序。

所以在這方面,它更安全。但是你仍然可以編寫不安全的代碼,因爲沒有任何語言可以保護你不寫簡單的錯誤代碼。

3

幾種語言,特別是C和C++,有一類錯誤,可以允許在被利用時執行任意代碼 - 這種錯誤很常見,而且很容易製作。這些錯誤通常是某種形式的buffer overflow

Java和許多其他語言/平臺可以消除這類錯誤(虛擬機本身存在可能被利用的漏洞),許多人聲稱這會使其更安全。

13

有兩件事情,使Java「更安全」,比在某些方面的其他語言:

  • 自動數組邊界檢查和缺乏手動內存管理,使編程錯誤某些類別的往往造成嚴重的安全孔(如緩衝區溢出)不可能。大多數其他現代語言都有這種特性,但在Java第一次出現時占主導地位(並且仍然是主要)的應用程序開發語言的C和C++不這樣做。
  • Security Manager概念使得在「沙箱」中運行Java應用程序變得相對容易,從而防止它們對正在運行的系統造成任何損害。這在推動Java早期發揮了重要作用,因爲Applets被設想爲一種無處不在,安全的方式來擁有客戶端Web應用程序。
+0

安全管理器更廣泛比那,並且仍然有用。您可以爲不同的代碼庫分配不同的權限。當你下載一些代碼時,這非常方便。 – 2010-10-08 19:39:07

+0

我聽說過很多謠言說從沙盒裏逃出並不難。 – 2010-10-08 23:59:59

+0

@Sami:可能有Java版本, JVM必須像其他任何與安全相關的大型軟件包一樣獲得定期的安全更新。但是肯定沒有通用的沙盒破解方法。 – 2010-10-09 07:12:29

2

這是市場營銷)

+1

優雅的答案:) – 2017-03-16 05:20:33

+0

這是正確的, – nehemiah 2017-08-21 04:25:56

2
  1. 這是一些基本的問題,在一些採訪中被問到爲什麼java被安全的原因背後,因爲java是安全的,因爲在jvm中存在一個軟件,其名稱是安全管理器 其責任是處理所有事情,如果發生錯誤.so其控制/防止系統

  2. 另一件事是它創建源代碼和系統(os)之間的接口,沒有任何用戶做任何錯誤的權限。

+4

這個答案甚至意味着什麼? – 2012-10-09 10:06:12

1
另外

通用類型(或泛型)承受表面相似於C++模板,無論是在它們的語法,並在其預期用途的情況下(如容器類)。但是相似性只是皮膚深層 - Java語言中的泛型幾乎全部在編譯器中實現,該編譯器執行類型檢查和類型推斷,然後生成普通的非泛型字節碼。這種實現技術稱爲擦除(編譯器使用通用類型信息來確保類型安全,但在生成字節碼之前將其擦除),這種技術有一些令人驚訝的結果,有時候會引起混淆。雖然泛型對於Java類中的類型安全來說是一大進步,但學習使用泛型幾乎肯定會提供一些機會,以便在此過程中頭疼(有時甚至是詛咒)。

2

Java編譯器將Java代碼轉換爲字節代碼(.class文件),然後這些字節代碼由Java虛擬機(JVM)運行。 JVM是一個解釋器,它安裝在每臺客戶機中,並通過互聯網進行最新的安全更新。當這個字節碼被執行時,JVM可以處理安全性。所以,據說Java比其他編程語言更安全。

0

**

>爲什麼Java是安全Lanquage

**

原因: 1. Java程序自己的虛擬機沙箱中運行 2.數據在Java中隱藏(OOP)使其成爲安全的語言之一。 也許有些觀點也存在,但現在無法回想起來。

3.不使用指針防止未經授權訪問內存塊。

4.No訪問所述存儲器管理

  • 訪問控制功能
  • 異常處理
  • 使用最終關鍵字
  • 包的java。安全提供了安全框架
  • Java安全性,在每個階段啓用的類和接口: final關鍵字 安全類加載 JIT安全管理 字節代碼驗證 自動內存管理 JSSE Java加密擴展 數字簽名 jaas:java認證和授權服務

    如果你已經學會了這個東西請像這樣