這篇文章將為大家詳細(xì)講解有關(guān).NET Framework安全防護(hù)技巧是怎么樣的,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
創(chuàng)新互聯(lián)主營(yíng)石河子網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件定制開發(fā),石河子h5小程序制作搭建,石河子網(wǎng)站營(yíng)銷推廣歡迎石河子等地區(qū)企業(yè)咨詢
作為一個(gè)開發(fā)人員來說,.NET Framework是一款功能非常強(qiáng)大的應(yīng)用程序。不過功能雖然強(qiáng)大,其安全性也還是需要我們?nèi)プ⒅氐?。好容易在繁重的開發(fā)任務(wù)之余抽出點(diǎn)時(shí)間學(xué)習(xí)一些東西。發(fā)現(xiàn)機(jī)子里有幾個(gè)關(guān)于 System.Security 內(nèi)容的示例,這一個(gè)命名空間以前還真是從來沒用過,正好拿來學(xué)習(xí)一下。由于不是系統(tǒng)的學(xué)習(xí),不好組織,想了想,就以.NET Framework安全防護(hù)的示例來說明吧?!?/p>
.NET Framework安全一、設(shè)定權(quán)限
[FileIOPermission(SecurityAction.
Demand, Write= "C:\\temp.txt")]
public class App :
System.Windows.Forms.Form
{
//略
}
FileIOPermissionAttribute 定義于 System.Security.Permissions 里。它繼承于 SecurityAttribute,在這個(gè)例子中,要求使用 App 類時(shí)必須具有對(duì) C:\temp.txt 文件的寫權(quán)限。
.net framework 的文檔中關(guān)于安全要求有這樣一段話:“若要確保只有被授予了指定權(quán)限的調(diào)用方才能夠調(diào)用您的代碼,可以聲明方式或強(qiáng)制方式要求您的代碼的調(diào)用方擁有特定的權(quán)限或權(quán)限集。要求使運(yùn)行庫執(zhí)行安全檢查,從而對(duì)調(diào)用代碼實(shí)施限制。在安全檢查過程中,運(yùn)行庫遍歷調(diào)用堆棧,檢查堆棧中每個(gè)調(diào)用方的權(quán)限,然后確定是否已將要求的權(quán)限授予每個(gè)調(diào)用方。如果發(fā)現(xiàn)某個(gè)調(diào)用方?jīng)]有要求的權(quán)限,則安全檢查失敗,并引發(fā) SecurityException?!?/p>
例子中,權(quán)限是以聲明的方式出現(xiàn)的。SecurityAction.Demand 可以作用于類或方法,在這里是作用于類上。Write 是 FileIOPermission 的屬性之一,其它常用屬性還有 Read、Append、All 等等。
SecurityAction 枚舉中還有一些值是作用于 assembly 上的。比如以下的例子:
[assembly:SecurityPermission
(SecurityAction.RequestMinimum ,
UnmanagedCode=true)]
SecurityAction.RequestMinimum 是請(qǐng)求運(yùn)行的最小權(quán)限。這一行要求程序集允許調(diào)用非托管代碼。
除了聲明方式外,還可以使用強(qiáng)制方式。如下的代碼:
FileIOPermission filePerm =
new FileIOPermission(FileIO
PermissionAccess.AllAccess,
"C:\\temp.txt");try
{
filePerm.Demand();
// Code to access file goes here
}
catch (SecurityException excep)
{
MessageBox.Show (excep.Message);
return;
}
.NET Framework安全二、用戶角色管理
用戶及其角色的管理是在許多程序中都要使用到的。如今 asp.net 2.0 對(duì)于這方面有了大大增強(qiáng),開發(fā)人員不需要很了解技術(shù)就可以做出很不錯(cuò)的應(yīng)用。不過對(duì)于 Windows Form 應(yīng)用程序來說,不少地方還需要程序員自己設(shè)定。
假定我們已知曉了 userName 以及它所屬于的 roles,那么可以這樣來設(shè)置當(dāng)前線程的 Principal:
GenericIdentity genIdent =
new GenericIdentity(userName);GenericPrincipal genPrin =
new GenericPrincipal
(genIdent, roles);Thread.CurrentPrincipal =
genPrin;
隨后我們有三種辦法來進(jìn)行用戶角色驗(yàn)證。
***種方法是使用 GenericPrincipal.IsInRole 方法:
GenericPrincipal currentPrin =
Thread.CurrentPrincipal as
GenericPrincipal;if (currentPrin != null &&
currentPrin.IsInRole("Manager")){
//略
}
第二種方法則是使用 PrincipalPermission 類,類似于權(quán)限設(shè)定中的強(qiáng)制方式:
PrincipalPermission prinPerm =
new PrincipalPermission
(null, "Manager");try
{
prinPerm.Demand();
//do something
}
catch
{
//error handling
}
第三種方式則類似于權(quán)限設(shè)定中的聲明方式:
private void DecPermButton_Click
(object sender, System.EventArgs e){
try
{
performManagerAction();
// do something
}
catch
{
// error handling
}
}
[PrincipalPermission
(SecurityAction.Demand,
Role="Manager")]void performManagerAction()
{
}
關(guān)于.NET Framework安全防護(hù)技巧是怎么樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。