Silverlight開發中的程式碼安全性
在Silverlight釋出時,微軟宣稱它將是一個完全跨平臺、跨瀏覽器的下一代富客戶端開發技術工具。但在使用絢麗功能的同時,很多人會思考Silverlight是否能夠一如既往地實現不同平臺間託管程式碼執行的安全性?答案是“除了安全,您沒有別的選擇”。
在Silverlight釋出時,微軟宣稱它將是一個完全跨平臺、跨瀏覽器的下一代富客戶端開發技術工具。但在使用絢麗功能的同時,很多人會思考Silverlight是否能夠一如既往地實現不同平臺間託管程式碼執行的安全性?答案是“除了安全,您沒有別的選擇”。
.NET Framework提供了一個新的安全方式——程式碼訪問安全(CAS:Code Access Security),通過Stack Walk檢查、Permission(/set)和Security Policy等一些措施我們可以保證不僅只有某些角色的人可以訪問某些功能(也就是常說的RBS:Role Based Security),就連哪些程式碼可以訪問何種資源也可以有效管理。
Silverlight推出後很多人更多關心的是它絢麗的UI效果和通過一個小小的CoreCLR就可以在多個平臺執行的能力,但當我們嘗試套用以往CAS的辦法定義訪問安全性的時候卻發現無從下手,原因在於SL採用了所謂的“透明安全模型”(transparency model),它將程式碼分成兩種:transparent Code和critical Code。前者是SL開發人員編寫的應用程式碼,在使用者態執行,執行主體是當前這個使用者,而執行的訪問控制設定為不受限;後者是CoreCLR在核心態執行的,它需要和具體的作業系統互動,完成例如檔案訪問、顯示卡呼叫等工作。在CoreCLR中兩個程式碼可能儲存在同一個Assembly中,但一個方法內部只能有唯一一類程式碼,而且transparent Code不能直接訪問critical Code。
因此,在SL開發中,我們能編寫的程式碼只能是滿足下述transparent Code要求的內容:
隱式滿足LinkDemand,即整個呼叫棧的所有程式碼都必須是transparent Code;
不需執行CAS的斷言(Assert);
全部程式碼都是可驗證的;
不可以通過Native Call或P/Invoke呼叫本地資源,一方面為了安全,另一方面因為不同平臺的本地呼叫方式不同;
不可以直接訪問critical code。
這樣您可能覺得SL開發限制很大,比如建立一個檔案這種操作在應用中非常普遍,為了實現這個目的,CoreCLR提供了一箇中間過渡——IsolatedStorage。某種意義上講,它是SL開發人員所能看到的邏輯執行平臺,無論是檔案、裝置還是程式之類的資訊都只能通過這個中間機制訪問,而嚴格的檢查也會“透明”的在這個中間機制完成。這麼做有什麼益處呢?很多。因為這一層把很多Best Practice強制實施了,例如:
開啟一個檔案的時候,檔名稱是否有效,是否存在潛在的緩衝區溢位等危險,當前使用者是否可以執行這個檔案開啟操作等;
訪問一個URL的時候,這個URL是否會Traverse up,是否可以遍歷到高層目錄。
總體上通過IsolatedStorage,把很多已知的程式碼安全訪問檢查全部在CoreCLR平臺一級內建了,開發人員可以通過這種“與生俱來”的安全性相對放心地開發自己的上層應用。
(CAS:Code Access Security),通過Stack Walk檢查、Permission(/set)和Security Policy等一些措施我們可以保證不僅只有某些角色的人可以訪問某些功能(也就是常說的RBS:Role Based Security),就連哪些程式碼可以訪問何種資源也可以有效管理。
Silverlight推出後很多人更多關心的是它絢麗的UI效果和通過一個小小的CoreCLR就可以在多個平臺執行的能力,但當我們嘗試套用以往CAS的辦法定義訪問安全性的時候卻發現無從下手,原因在於SL採用了所謂的“透明安全模型”(transparency model),它將程式碼分成兩種:transparent Code和critical Code。前者是SL開發人員編寫的應用程式碼,在使用者態執行,執行主體是當前這個使用者,而執行的訪問控制設定為不受限;後者是CoreCLR在核心態執行的,它需要和具體的作業系統互動,完成例如檔案訪問、顯示卡呼叫等工作。在CoreCLR中兩個程式碼可能儲存在同一個Assembly中,但一個方法內部只能有唯一一類程式碼,而且transparent Code不能直接訪問critical Code。
因此,在SL開發中,我們能編寫的程式碼只能是滿足下述transparent Code要求的內容:
隱式滿足LinkDemand,即整個呼叫棧的所有程式碼都必須是transparent Code;
不需執行CAS的斷言(Assert);
全部程式碼都是可驗證的;
不可以通過Native Call或P/Invoke呼叫本地資源,一方面為了安全,另一方面因為不同平臺的本地呼叫方式不同;
不可以直接訪問critical code。
這樣您可能覺得SL開發限制很大,比如建立一個檔案這種操作在應用中非常普遍,為了實現這個目的,CoreCLR提供了一箇中間過渡——IsolatedStorage。某種意義上講,它是SL開發人員所能看到的邏輯執行平臺,無論是檔案、裝置還是程式之類的資訊都只能通過這個中間機制訪問,而嚴格的檢查也會“透明”的在這個中間機制完成。這麼做有什麼益處呢?很多。因為這一層把很多Best Practice強制實施了,例如:
開啟一個檔案的時候,檔名稱是否有效,是否存在潛在的緩衝區溢位等危險,當前使用者是否可以執行這個檔案開啟操作等;
訪問一個URL的時候,這個URL是否會Traverse up,是否可以遍歷到高層目錄。
總體上通過IsolatedStorage,把很多已知的程式碼安全訪問檢查全部在CoreCLR平臺一級內建了,開發人員可以通過這種“與生俱來”的安全性相對放心地開發自己的上層應用。
在Silverlight釋出時,微軟宣稱它將是一個完全跨平臺、跨瀏覽器的下一代富客戶端開發技術工具。但在使用絢麗功能的同時,很多人會思考Silverlight是否能夠一如既往地實現不同平臺間託管程式碼執行的安全性?答案是“除了安全,您沒有別的選擇”。
.NET Framework提供了一個新的安全方式——程式碼訪問安全(CAS:Code Access Security),通過Stack Walk檢查、Permission(/set)和Security Policy等一些措施我們可以保證不僅只有某些角色的人可以訪問某些功能(也就是常說的RBS:Role Based Security),就連哪些程式碼可以訪問何種資源也可以有效管理。
Silverlight推出後很多人更多關心的是它絢麗的UI效果和通過一個小小的CoreCLR就可以在多個平臺執行的能力,但當我們嘗試套用以往CAS的辦法定義訪問安全性的時候卻發現無從下手,原因在於SL採用了所謂的“透明安全模型”(transparency model),它將程式碼分成兩種:transparent Code和critical Code。前者是SL開發人員編寫的應用程式碼,在使用者態執行,執行主體是當前這個使用者,而執行的訪問控制設定為不受限;後者是CoreCLR在核心態執行的,它需要和具體的作業系統互動,完成例如檔案訪問、顯示卡呼叫等工作。在CoreCLR中兩個程式碼可能儲存在同一個Assembly中,但一個方法內部只能有唯一一類程式碼,而且transparent Code不能直接訪問critical Code。
因此,在SL開發中,我們能編寫的程式碼只能是滿足下述transparent Code要求的內容:
隱式滿足LinkDemand,即整個呼叫棧的所有程式碼都必須是transparent Code;
不需執行CAS的斷言(Assert);
全部程式碼都是可驗證的;
不可以通過Native Call或P/Invoke呼叫本地資源,一方面為了安全,另一方面因為不同平臺的本地呼叫方式不同;
不可以直接訪問critical code。
這樣您可能覺得SL開發限制很大,比如建立一個檔案這種操作在應用中非常普遍,為了實現這個目的,CoreCLR提供了一箇中間過渡——IsolatedStorage。某種意義上講,它是SL開發人員所能看到的邏輯執行平臺,無論是檔案、裝置還是程式之類的資訊都只能通過這個中間機制訪問,而嚴格的檢查也會“透明”的在這個中間機制完成。這麼做有什麼益處呢?很多。因為這一層把很多Best Practice強制實施了,例如:
開啟一個檔案的時候,檔名稱是否有效,是否存在潛在的緩衝區溢位等危險,當前使用者是否可以執行這個檔案開啟操作等;
訪問一個URL的時候,這個URL是否會Traverse up,是否可以遍歷到高層目錄。
總體上通過IsolatedStorage,把很多已知的程式碼安全訪問檢查全部在CoreCLR平臺一級內建了,開發人員可以通過這種“與生俱來”的安全性相對放心地開發自己的上層應用。
(CAS:Code Access Security),通過Stack Walk檢查、Permission(/set)和Security Policy等一些措施我們可以保證不僅只有某些角色的人可以訪問某些功能(也就是常說的RBS:Role Based Security),就連哪些程式碼可以訪問何種資源也可以有效管理。
Silverlight推出後很多人更多關心的是它絢麗的UI效果和通過一個小小的CoreCLR就可以在多個平臺執行的能力,但當我們嘗試套用以往CAS的辦法定義訪問安全性的時候卻發現無從下手,原因在於SL採用了所謂的“透明安全模型”(transparency model),它將程式碼分成兩種:transparent Code和critical Code。前者是SL開發人員編寫的應用程式碼,在使用者態執行,執行主體是當前這個使用者,而執行的訪問控制設定為不受限;後者是CoreCLR在核心態執行的,它需要和具體的作業系統互動,完成例如檔案訪問、顯示卡呼叫等工作。在CoreCLR中兩個程式碼可能儲存在同一個Assembly中,但一個方法內部只能有唯一一類程式碼,而且transparent Code不能直接訪問critical Code。
因此,在SL開發中,我們能編寫的程式碼只能是滿足下述transparent Code要求的內容:
隱式滿足LinkDemand,即整個呼叫棧的所有程式碼都必須是transparent Code;
不需執行CAS的斷言(Assert);
全部程式碼都是可驗證的;
不可以通過Native Call或P/Invoke呼叫本地資源,一方面為了安全,另一方面因為不同平臺的本地呼叫方式不同;
不可以直接訪問critical code。
這樣您可能覺得SL開發限制很大,比如建立一個檔案這種操作在應用中非常普遍,為了實現這個目的,CoreCLR提供了一箇中間過渡——IsolatedStorage。某種意義上講,它是SL開發人員所能看到的邏輯執行平臺,無論是檔案、裝置還是程式之類的資訊都只能通過這個中間機制訪問,而嚴格的檢查也會“透明”的在這個中間機制完成。這麼做有什麼益處呢?很多。因為這一層把很多Best Practice強制實施了,例如:
開啟一個檔案的時候,檔名稱是否有效,是否存在潛在的緩衝區溢位等危險,當前使用者是否可以執行這個檔案開啟操作等;
訪問一個URL的時候,這個URL是否會Traverse up,是否可以遍歷到高層目錄。
總體上通過IsolatedStorage,把很多已知的程式碼安全訪問檢查全部在CoreCLR平臺一級內建了,開發人員可以通過這種“與生俱來”的安全性相對放心地開發自己的上層應用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-594738/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Silverlight的開發工具
- silverlight 在企業應用開發中的定位
- web 開發的安全性?Web
- 前端開發中的程式碼藝術(精要)前端
- Silverlight Project開發Project
- 開發中的程式碼規範實踐 PHPPHP
- 含有SilverLight專案的程式碼重用
- 配置silverlight 2的開發環境開發環境
- 10個開發中實用的 jQuery 程式碼片段jQuery
- Silverlight中多個storyboard順序播放(程式碼實現)
- 嵌入式開發程式碼中的extern "C" {的作用
- Android開發中網路安全性配置問題Android
- SuperMap iClient for Silverlight開發筆記(不斷補充中)client筆記
- C# 程式開發中經常遇到的10條實用的程式碼C#
- C#程式開發中經常遇到的10條實用的程式碼C#
- SuperMap iClient for Silverlight開發準備client
- Whitehat Security:75%的開發人員擔心應用程式安全性
- 前端開發中的字元編碼前端字元
- 瞭解 .NET Framework 2.0 中“程式碼訪問安全性”(CAS) 的新特點Framework
- 低程式碼開發和零程式碼開發有哪些區別
- WEB程式設計開發常用的程式碼Web程式設計
- 婚戀交友原始碼開發,關於API介面安全性問題的思考原始碼API
- Silverlight開發實踐--PicZoomShow(源)OOM
- java開發中JDBC連線資料庫程式碼JavaJDBC資料庫
- [探索] 在開發中儘量提高程式碼的複用性
- 為什麼說無程式碼開發比低程式碼開發更好?
- ArcGIS API for Silverlight程式碼中使用Template模板API
- Silverlight遊戲開發:引擎”Night”解析遊戲開發
- ArcGIS API for Silverlight開發入門準備API
- JSjet可在Eclipse中編輯開發Javascript程式碼JSEclipseJavaScript
- 程式碼安全性和健壯性:如何在if和assert中做選擇?
- 低程式碼開發對軟體開發流程的影響
- iOS開發中識別圖中的二維碼iOS
- 介紹幾個程式碼實際開發中很實用的工具
- 低程式碼平臺在企業軟體開發中的優勢
- 無程式碼平臺之間的區別,和你想象中的無程式碼開發有沒差異?
- 前端開發中的字元編碼詳解前端字元
- 一個delphi開發的惡意程式程式碼薦