權威測試結果:Java不如.NET安全?
原創【51CTO特稿】在Java推出基于字節碼的跨平臺技術之后,Microsoft也為.NET推出了字節碼解釋模型(common language runtime)。對于兩者的區別,我個人的觀點一直是他們都可以開發出安全級別很高的應用軟件,只是兩者的開發形式、適用環境有一些區別罷了。對于安全問題,以前也經常有客戶會問到兩者之間的區別,當時也沒有很在意,因為任何一方的安全級別都已經足夠滿足客戶的要求了。也就是說即使有一些高低區別也沒有大的關系。
Veracode是一家應用產品安全測試方案提供商,他們的服務是對二進制、字節碼以及Web應用進行掃描,以發現安全問題。他們一直持續保留和收集著他們每次的掃描結果,并最近開始發布他們他們的掃描結果分析報告。因為他們的工作范圍里,既有.NET應用,也有Java應用,因此我們可以通過他們的數據得到一些.NET和Java之間的安全差異證據。
需要說明的是,這些數據并不是出現在正式發布的報告當中(這些數據將可能出現在下一次修訂當中。編輯注:也許是在等待廠商進行公關)。從這個報告的數據中可以看出:每MB代碼中,.NET的漏洞密度為27.2,Java則為30.0。也就是單位數量代碼中Java的安全漏洞要高于.NET。
對大多數人來說,這是一個非常接近的數字,也在抽樣誤差允許范圍之內。可以認為.NET和Java的安全性在同一個級別范圍內。但是如果將安全問題數據再進一步劃分為不同類型的話,則會發現更有趣的事情,會發現在不同的方面.NET和Java的安全成都差異還是比較大的。下面是報告的一部分內容:
這是一個對.NET和Java開發者非常有用的數據。因為從報告中可以看到兩個程序語言在哪些方面更容易出現安全問題,比如二者的跨站腳本攻擊防范能力都不高(注:在Java Servlet 3.0規范中已經做了改進),所以設計應用的時候就要注意防范跨站腳本攻擊問題,尤其是.NET更應該注意。在Veracode的說明中對這個問題的解釋是:之所以.NET在防范跨站腳本攻擊方面問題這么多,是因為老版本的.NET控制結構不會對輸出進行編碼,因此如果要使用.NET的話。確認一定要使用最新的控制結構。
最后需要注意的是,安全問題并不是選擇一個程序語言,或者說是在.NET和Java之間,或者是構建在其上的產品之間的選擇理由。一個完整的系統,要綜合考慮應用領域環境、用戶特點要求、未來維護發展等很多方面。
【編輯推薦】