我想這是一個普遍的問題,但我正在通過介紹性課程到java(SE/ME)和研究材料聲稱java經常用於「安全目的」。然而,它並沒有解釋它們聲稱java具有良好的安全性。爲什麼Java被標記爲「安全」語言?
這是黑客證明嗎?它是否產生高度穩定的軟件?什麼?
從我的角度來看安全性(目前)是它掌握在編寫代碼的開發者手中,而不是語言本身?
我想這是一個普遍的問題,但我正在通過介紹性課程到java(SE/ME)和研究材料聲稱java經常用於「安全目的」。然而,它並沒有解釋它們聲稱java具有良好的安全性。爲什麼Java被標記爲「安全」語言?
這是黑客證明嗎?它是否產生高度穩定的軟件?什麼?
從我的角度來看安全性(目前)是它掌握在編寫代碼的開發者手中,而不是語言本身?
恕我直言,這是一個非常令人誤解的聲明。在Java中,您無法訪問超出界限的數組,並且您沒有指針,因此在Java中無法利用堆棧損壞或緩衝區溢出等多個安全漏洞。但是Java本質上並不比其他語言更安全。只是出現可能導致安全漏洞的錯誤的機會較小。實際上,這會減少安全漏洞,但說Java是安全的,這完全是誤導。
通常,當人們說Java是「安全「,這正是你正在陳述的原因 - 無界數組和差指針算術是C代碼中的兩個常見安全錯誤。 – aperkins 2010-10-08 19:28:37
從某種意義上來說,它更安全一些,以降低運行Java VM(沙箱)的系統的機會。 Lie Ryan的看法是,它不會使應用程序本身更安全。即你仍然可以進行SQL注入,如果你自己僞造你的SQL查詢並且不能正確地轉義它,並且類似的「安全性」錯誤 – Tseng 2010-10-08 19:37:43
所以擺脫以前的** **最常見的安全問題原因(緩衝區溢出/溢出)本質上不比C更安全?你在自己的回答中自相矛盾:*「Java本質上不比其他語言更安全」*(錯誤)和*「實際上,這減少了安全漏洞」(正確)。那麼你選擇什麼?它不**,因爲你沒有防範所有安全問題,你不比其他語言更安全。祝你好運逃離VM Lie Ryan;) – SyntaxT3rr0r 2010-10-09 08:32:36
因爲Java編譯爲bytecode,然後在Virtual machine內運行,它不能像本地編譯的程序那樣訪問運行的計算機。
這與編譯爲IL並在.net運行時中運行的.net代碼相同。 – 2010-10-08 19:31:40
從技術上講,這是不正確的,因爲您可以使用JNI訪問本機對系統的調用,並且Java程序仍然會對系統造成嚴重破壞 - 刪除文件,執行命令行參數等。 – aperkins 2010-10-08 19:32:41
Java被認爲比C更安全的一般原因是因爲它爲您處理內存管理。在其他語言中,程序員分配自己的內存並且經常無法正確執行,導致緩衝區溢出等等。當然,Java VM仍然可以包含相同類型的錯誤,但是隨着時間的推移它會得到很好的測試,不像每個用戶編寫的程序。
所以在這方面,它更安全。但是你仍然可以編寫不安全的代碼,因爲沒有任何語言可以保護你不寫簡單的錯誤代碼。
幾種語言,特別是C和C++,有一類錯誤,可以允許在被利用時執行任意代碼 - 這種錯誤很常見,而且很容易製作。這些錯誤通常是某種形式的buffer overflow。
Java和許多其他語言/平臺可以消除這類錯誤(虛擬機本身存在可能被利用的漏洞),許多人聲稱這會使其更安全。
有兩件事情,使Java「更安全」,比在某些方面的其他語言:
安全管理器更廣泛比那,並且仍然有用。您可以爲不同的代碼庫分配不同的權限。當你下載一些代碼時,這非常方便。 – 2010-10-08 19:39:07
我聽說過很多謠言說從沙盒裏逃出並不難。 – 2010-10-08 23:59:59
@Sami:可能有Java版本, JVM必須像其他任何與安全相關的大型軟件包一樣獲得定期的安全更新。但是肯定沒有通用的沙盒破解方法。 – 2010-10-09 07:12:29
在http://download.oracle.com/javase/6/docs/technotes/guides/security/overview/jsoverview.html有一個很好的概述。
一些例子:
這是一些基本的問題,在一些採訪中被問到爲什麼java被安全的原因背後,因爲java是安全的,因爲在jvm中存在一個軟件,其名稱是安全管理器 其責任是處理所有事情,如果發生錯誤.so其控制/防止系統
另一件事是它創建源代碼和系統(os)之間的接口,沒有任何用戶做任何錯誤的權限。
這個答案甚至意味着什麼? – 2012-10-09 10:06:12
通用類型(或泛型)承受表面相似於C++模板,無論是在它們的語法,並在其預期用途的情況下(如容器類)。但是相似性只是皮膚深層 - Java語言中的泛型幾乎全部在編譯器中實現,該編譯器執行類型檢查和類型推斷,然後生成普通的非泛型字節碼。這種實現技術稱爲擦除(編譯器使用通用類型信息來確保類型安全,但在生成字節碼之前將其擦除),這種技術有一些令人驚訝的結果,有時候會引起混淆。雖然泛型對於Java類中的類型安全來說是一大進步,但學習使用泛型幾乎肯定會提供一些機會,以便在此過程中頭疼(有時甚至是詛咒)。
Java編譯器將Java代碼轉換爲字節代碼(.class文件),然後這些字節代碼由Java虛擬機(JVM)運行。 JVM是一個解釋器,它安裝在每臺客戶機中,並通過互聯網進行最新的安全更新。當這個字節碼被執行時,JVM可以處理安全性。所以,據說Java比其他編程語言更安全。
**
>爲什麼Java是安全Lanquage
**
原因: 1. Java程序自己的虛擬機沙箱中運行 2.數據在Java中隱藏(OOP)使其成爲安全的語言之一。 也許有些觀點也存在,但現在無法回想起來。
3.不使用指針防止未經授權訪問內存塊。
4.No訪問所述存儲器管理
Java安全性,在每個階段啓用的類和接口: final關鍵字 安全類加載 JIT安全管理 字節代碼驗證 自動內存管理 JSSE Java加密擴展 數字簽名 jaas:java認證和授權服務
如果你已經學會了這個東西請像這樣
你確定他們不是說「安全」而不是「安全嗎?」這是完全不同的兩件事。 – 2010-10-08 19:28:15
你能包括你的學習材料的報價嗎?只是說'安全'是相當廣泛的沒有更多的上下文。 – 2010-10-08 19:29:25
與講座相關的演講爲Java提供了「安全性」,然後主講者繼續列出了銀行系統,股票市場(納斯達克),智能卡和其他幾個領域的javas使用情況。 – Marcus 2010-10-08 19:38:06