為你揭開Silverlight代碼安全性秘密
Silverlight開發(fā)工具功能強(qiáng)大,在開發(fā)使用中可以靈活的運(yùn)用在各個(gè)領(lǐng)域中去幫助我們實(shí)現(xiàn)基于多媒體的各種用途。那么有沒有人對(duì)其的安全性能做過評(píng)估呢?在這里我們就為大家詳細(xì)介紹一下Silverlight代碼安全性的相關(guān)概念。#t#
在Silverlight發(fā)布時(shí),微軟宣稱它將是一個(gè)完全跨平臺(tái)、跨瀏覽器的下一代富客戶端開發(fā)技術(shù)工具。但在使用絢麗功能的同時(shí),很多人會(huì)思考Silverlight是否能夠一如既往地實(shí)現(xiàn)不同平臺(tái)間托管代碼執(zhí)行的安全性?答案是“除了安全,您沒有別的選擇”。
.NET Framework提供了一個(gè)新的安全方式——代碼訪問安全(CAS:Code Access Security),通過Stack Walk檢查、Permission(/set)和Security Policy等一些措施我們可以保證不僅只有某些角色的人可以訪問某些功能(也就是常說的RBS:Role Based Security),就連哪些代碼可以訪問何種資源也可以有效管理。
Silverlight推出后很多人更多關(guān)心的是它絢麗的UI效果和通過一個(gè)小小的CoreCLR就可以在多個(gè)平臺(tái)運(yùn)行的能力,但當(dāng)我們嘗試套用以往CAS的辦法定義訪問安全性的時(shí)候卻發(fā)現(xiàn)無從下手,原因在于SL采用了所謂的“透明安全模型”(transparency model),它將代碼分成兩種:transparent Code和critical Code。前者是SL開發(fā)人員編寫的應(yīng)用代碼,在用戶態(tài)執(zhí)行,執(zhí)行主體是當(dāng)前這個(gè)用戶,而執(zhí)行的訪問控制設(shè)置為不受限;后者是CoreCLR在核心態(tài)執(zhí)行的,它需要和具體的操作系統(tǒng)交互,完成例如文件訪問、顯卡調(diào)用等工作。在CoreCLR中兩個(gè)代碼可能保存在同一個(gè)Assembly中,但一個(gè)方法內(nèi)部只能有唯一一類代碼,而且transparent Code不能直接訪問critical Code。
因此,在Silverlight代碼安全性開發(fā)中,我們能編寫的代碼只能是滿足下述transparent Code要求的內(nèi)容:
隱式滿足LinkDemand,即整個(gè)調(diào)用棧的所有代碼都必須是transparent Code;
不需執(zhí)行CAS的斷言(Assert);
全部代碼都是可驗(yàn)證的;
不可以通過Native Call或P/Invoke調(diào)用本地資源,一方面為了安全,另一方面因?yàn)椴煌脚_(tái)的本地調(diào)用方式不同;
不可以直接訪問critical code。
這樣您可能覺得Silverlight代碼安全性的開發(fā)限制很大,比如建立一個(gè)文件這種操作在應(yīng)用中非常普遍,為了實(shí)現(xiàn)這個(gè)目的,CoreCLR提供了一個(gè)中間過渡——IsolatedStorage。某種意義上講,它是SL開發(fā)人員所能看到的邏輯運(yùn)行平臺(tái),無論是文件、設(shè)備還是進(jìn)程之類的信息都只能通過這個(gè)中間機(jī)制訪問,而嚴(yán)格的檢查也會(huì)“透明”的在這個(gè)中間機(jī)制完成。這么做有什么益處呢?很多。因?yàn)檫@一層把很多Best Practice強(qiáng)制實(shí)施了,例如:
打開一個(gè)文件的時(shí)候,文件名稱是否有效,是否存在潛在的緩沖區(qū)溢出等危險(xiǎn),當(dāng)前用戶是否可以執(zhí)行這個(gè)文件打開操作等;
訪問一個(gè)URL的時(shí)候,這個(gè)URL是否會(huì)Traverse up,是否可以遍歷到高層目錄。
總體上通過IsolatedStorage,把很多已知的代碼安全訪問檢查全部在CoreCLR平臺(tái)一級(jí)內(nèi)置了,開發(fā)人員可以通過這種“與生俱來”的安全性相對(duì)放心地開發(fā)自己的上層應(yīng)用。
(CAS:Code Access Security),通過Stack Walk檢查、Permission(/set)和Security Policy等一些措施我們可以保證不僅只有某些角色的人可以訪問某些功能(也就是常說的RBS:Role Based Security),就連哪些代碼可以訪問何種資源也可以有效管理。由此可以看出Silverlight代碼安全性的重要性。