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





















