.NET體系中的源程序安全問(wèn)題(1)
發(fā)布時(shí)間:2008-08-07 閱讀數(shù): 次 來(lái)源:網(wǎng)樂(lè)原科技
在.NET平臺(tái)上,代碼以中間語(yǔ)言的形式運(yùn)行,它是.NET眾多優(yōu)勢(shì)的基礎(chǔ)。但在獨(dú)立桌面應(yīng)用中,它給源代碼的安全帶來(lái)了威脅。本文探討產(chǎn)生這個(gè)問(wèn)題的原因,分析可能的解決辦法。
在Visual Studio.NET(VS.NET)體系中,VB、Visual C++以及C#之類的編譯器把源程序編譯成MSIL。MSIL即Microsoft Intermediate Language,或Microsoft中間語(yǔ)言,它在執(zhí)行之前被即時(shí)(Just-In-Time Compile,JIT)編譯成為機(jī)器語(yǔ)言。但是,你可能還沒(méi)有深入了解當(dāng)你在VS中點(diǎn)擊Build按鈕時(shí)發(fā)生了什么事情,或者你私有的源代碼和信息是否在偷窺的眼光面前安然無(wú)恙、當(dāng)你把IL代碼發(fā)布給客戶時(shí)是否能夠保證代碼不被篡改。下面我們將深入.NET的內(nèi)部工作過(guò)程,探討VB.NET體系MSIL的特點(diǎn)和一些你必須關(guān)心的問(wèn)題。
你必須搞清楚以下幾個(gè)問(wèn)題。首先,.NET是為客戶機(jī)/服務(wù)器系統(tǒng)以及Web應(yīng)用而設(shè)計(jì)的。軟件開(kāi)發(fā)正在逐漸向Internet以及基于客戶機(jī)/服務(wù)器的應(yīng)用發(fā)展,許多應(yīng)用不再有傳統(tǒng)風(fēng)格的界面,而是提供類似瀏覽器的界面。.NET也同樣追隨著這個(gè)趨勢(shì)。
第二,在桌面應(yīng)用中,我們無(wú)法保護(hù)以受管理的MSIL形式存在的代碼,如果你覺(jué)得保護(hù)知識(shí)產(chǎn)權(quán)(即源代碼)非常重要,那么.NET不適合桌面應(yīng)用開(kāi)發(fā)。雖然MSIL的承諾令人心動(dòng),雖然.NET平臺(tái)和CLR(Common Language Runtime)很穩(wěn)定,但從安全的角度來(lái)看,對(duì)于一個(gè)獨(dú)立的桌面應(yīng)用來(lái)說(shuō),這一切缺乏實(shí)際意義。在.NET中,作為一個(gè)VB程序員甚至是C#程序員,你只能編寫受管理、不受保護(hù)的代碼。
由于存在這種限制,如果你要在桌面應(yīng)用中保護(hù)代碼,你必須使用非受管理的C++。保護(hù)知識(shí)產(chǎn)權(quán)唯一真正有效的方法是:用非受管理的C++組件封裝代碼,然后從.NET受管理代碼中通過(guò)COM協(xié)作接口調(diào)用它。
另外你還必須清楚的是,由于Active Server Pages.NET(ASP.NET)完全在服務(wù)器端運(yùn)行,因此ASP.NET應(yīng)用是安全的。實(shí)際上,這正是.NET最理想的境界——在受保護(hù)的服務(wù)器上運(yùn)行代碼,讓代碼遠(yuǎn)離任何想要研究它的人。ASP.NET把Web開(kāi)發(fā)簡(jiǎn)化到了難以置信的程度,而Visual Basic.NET正是編寫ASP.NET應(yīng)用的優(yōu)秀工具。
掌握VB.NET需要經(jīng)過(guò)艱苦的學(xué)習(xí),而全面接受.NET更是一個(gè)緩慢的過(guò)程。從VB6遷移到VB.NET并非輕而易舉,在把VB6應(yīng)用移植到VB.NET之前的時(shí)間里,你仍舊需要提供對(duì)VB6應(yīng)用的支持。在未來(lái)很長(zhǎng)的時(shí)間內(nèi),許多開(kāi)發(fā)者仍將使用VB6。