国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

Visual Basic .NET 和 Visual C# .NET 程序員需要解決的安全問題 (z

2024-07-10 13:04:19
字體:
供稿:網(wǎng)友
visual basic .net 和 visual c# .net 程序員需要解決的安全問題
robin reynolds-haertle
visual studio team
microsoft corporation
2002 年 1 月

摘要:本文著重討論了 visual basic .net 和 visual c# .net 開發(fā)人員在開始使用 .net 框架時需要解決的主要安全問題。此概述討論了 windows 應(yīng)用程序和 web 應(yīng)用程序,以及開發(fā)過程的實現(xiàn)、調(diào)試和部署階段。
本文適用于 visual studio .net 和 .net 框架的最終版本。如果您使用的是預(yù)發(fā)布版本,則其中應(yīng)用程序的運行可能與本文所討論的略有不同。

目錄

  • 簡介
  • 代碼訪問安全性
    • 完全信任
    • 部分信任
    • 部分信任環(huán)境的開發(fā)
    • 測試
    • 其他資源
  • web 應(yīng)用程序
    • 動態(tài)發(fā)現(xiàn)
    • 身份驗證、模擬和委托
    • aspnet 進程標(biāo)識
    • 在 aspnet 標(biāo)識下運行時保護文件資源的安全
    • 使用 aspnet 標(biāo)識進行調(diào)試
  • visual studio .net 開發(fā)環(huán)境中的安全機制
  • 總結(jié)

簡介


與早期版本的 visual studio 相比,microsoft® visual studio® .net 為應(yīng)用程序的運行提供了更好的安全控制。.net 框架提供了更多的控制,同時也要求您承擔(dān)更多的編程責(zé)任。在為用戶創(chuàng)建友好易用的應(yīng)用程序時,您需要解決一些安全問題。
通常在以下三種情況下需要解決安全問題:
  • 運行您的應(yīng)用程序的用戶可能拒絕該應(yīng)用程序的權(quán)限,因為應(yīng)用程序所運行的位置已被指定為拒絕該用戶訪問某些系統(tǒng)資源。例如,用戶可以通過配置公共語言運行時來拒絕存儲在網(wǎng)絡(luò)驅(qū)動器上的所有應(yīng)用程序的文件權(quán)限。您在編寫代碼時應(yīng)注意此問題,并且應(yīng)編寫代碼對這種拒絕作出恰當(dāng)?shù)幕貞?yīng)。
  • 需要防止從您的 web 服務(wù)器訪問 web 應(yīng)用程序的用戶在服務(wù)器上運行惡意代碼或破壞數(shù)據(jù)。
  • visual studio 的設(shè)置方式將或多或少地使服務(wù)器面臨受到惡意代碼攻擊的危險。

代碼訪問安全性


代碼訪問安全性是 .net 框架的一個系統(tǒng),它通過控制代碼的執(zhí)行來控制對資源的訪問。這種安全功能獨立于操作系統(tǒng)提供的安全性,并且是對操作系統(tǒng)提供的安全性的補充。當(dāng)用戶運行您的應(yīng)用程序時,應(yīng)用程序?qū)⒂?.net 公共語言運行時分配到五個區(qū)域之一。這五個區(qū)域是:
  • 我的電腦 - 用戶計算機上的應(yīng)用程序。
  • 本地 intranet - 用戶的 intranet 上的應(yīng)用程序。
  • internet - 來自 internet 的應(yīng)用程序。
  • 可信站點 - 來自由 internet explorer 定義為“可信”站點的應(yīng)用程序。
  • 不可信站點 - 來自由 internet explorer 定義為“受限”站點的應(yīng)用程序。

上述每個區(qū)域都由系統(tǒng)管理員設(shè)置了特定的訪問權(quán)限??梢詫⒚總€區(qū)域的安全級別設(shè)置為完全信任、中級信任、低級信任或不信任。信任級別定義了應(yīng)用程序可以訪問的資源。區(qū)域與其他安全憑證(例如發(fā)布者、強名稱、web 站點以及代碼的 url)一起確定在運行時授予該代碼的權(quán)限。您無法控制用戶計算機上的安全設(shè)置,但您的應(yīng)用程序在運行時仍會受到即時設(shè)置的限制。這就意味著應(yīng)用程序可能會被拒絕訪問某些特定資源。例如,應(yīng)用程序可能需要將數(shù)據(jù)寫入文件,但用戶的系統(tǒng)將通過引發(fā)異常而拒絕在運行時進行寫入訪問。有關(guān)安全憑證的詳細信息,請參閱 evidence(英文)。
您的工作就是開發(fā)應(yīng)用程序來處理這種情況。這并不表示讓您的應(yīng)用程序用另外一種方法來寫入數(shù)據(jù),而是說您的應(yīng)用程序應(yīng)該預(yù)計到可能無法寫入數(shù)據(jù),然后對這種可能性作出響應(yīng)。您可能需要使用更多的異常處理(visual basic 中的 try...catch 或 c# 中的 try...catch)或 system.security.permissions 命名空間中的某些對象,以使應(yīng)用程序代碼更加可靠。本文后面“部分信任環(huán)境的開發(fā)”一節(jié)對這些方法進行了簡要說明。
區(qū)域的安全級別可以通過隨 .net 框架一起安裝的“管理工具”來進行設(shè)置。有關(guān)在計算機上設(shè)置區(qū)域安全級別的詳細信息,請參閱 administration tools(英文)。

完全信任


開發(fā)人員通常在完全信任環(huán)境中工作。他們將源代碼存放在硬盤驅(qū)動器上,并在用于開發(fā)的計算機上對其應(yīng)用程序進行測試。在這種完全信任環(huán)境中,開發(fā)人員編譯的任何代碼都可以在本地計算機上運行。由于本地計算機被默認定義為完全信任環(huán)境,因此不會出現(xiàn)安全異常。

部分信任


部分信任是指完全信任區(qū)域以外的所有區(qū)域。部署應(yīng)用程序時,應(yīng)用程序可能會移至新的區(qū)域,而新區(qū)域可能不完全信任應(yīng)用程序。在部分信任環(huán)境中運行代碼的兩種最常見的情況是:
  • 運行從 internet 下載的代碼。
  • 運行駐留在網(wǎng)絡(luò)共享位置 (intranet) 的代碼。

在部分信任區(qū)域中可能會被拒絕訪問的資源示例包括:
  • 文件 i/o,包括文件的讀取、寫入、創(chuàng)建、刪除或打印。
  • 系統(tǒng)組件,如注冊表值和環(huán)境變量。
  • 服務(wù)器組件,包括目錄服務(wù)、注冊表、事件日志、性能計數(shù)器和消息隊列。

在部分信任環(huán)境中哪些內(nèi)容是不允許的呢?這不太容易確定。.net 框架中的每個類以及每個類中的每種方法都有一個安全屬性,用于定義運行該方法所需的信任級別,并且正是由于這些安全功能,使得在運行時可能無法訪問該屬性。區(qū)域級別并不只是信任級別到屬性的簡單映射,而是一個授予特定類和方法的特定權(quán)限的集合。您的應(yīng)用程序無法只是簡單地查詢信任級別然后就可以預(yù)計哪些資源不可用。您可以確定應(yīng)用程序是否在完全信任環(huán)境中運行。在下一節(jié)“部分信任環(huán)境的開發(fā)”中,我們將介紹一種方法。

部分信任環(huán)境的開發(fā)


本節(jié)簡要介紹了安全問題可能會對編寫的代碼產(chǎn)生什么樣的影響。部分信任環(huán)境的開發(fā)沒有單一的解決方案。您的解決方案取決于您所編寫的應(yīng)用程序。此外,由于信任級別在應(yīng)用程序的執(zhí)行過程中可能會發(fā)生變化,因此不能僅測試現(xiàn)有的信任級別,然后就繼續(xù)執(zhí)行。
開發(fā)部分信任區(qū)域的第一步是編寫能夠識別即將發(fā)生安全異常的代碼。請注意以下代碼:
' visual basicpublic sub makeabitmap()   dim b as bitmap = new bitmap(100, 100)   ' 此處的代碼將以位圖格式繪制一張漂亮的圖片   b.save("c:/prettypicture.bmp")end sub// c#public void makeabitmap(){   bitmap b = new bitmap(100, 100);   // 此處的代碼將以位圖格式繪制一張漂亮的圖片   b.save("c://prettypicture.bmp");}

如果項目和項目程序集存儲在您計算機的硬盤驅(qū)動器上,并且您是計算機 administrators 組的成員,則此方法在運行時不會引發(fā)異常。如果將此應(yīng)用程序部署到您的 intranet,則當(dāng)應(yīng)用程序試圖保存位圖對象時,將引發(fā) system.security.securityexception(請參閱 securityexception class [英文])。如果此代碼周圍沒有 try...catch(在 visual basic 中)或 try...catch(在 c# 中)塊,則應(yīng)用程序?qū)⒁虍惓6K止。這會令用戶感到不滿意。如果您添加異常處理代碼,應(yīng)用程序就能夠:
  • 警告用戶應(yīng)用程序無法完成所有需要完成的任務(wù)。
  • 清除所有現(xiàn)有對象,以便 catch 塊后面的代碼能夠成功運行。

您可以按如下所示修改保存位圖的代碼。添加的代碼將警告用戶該文件因安全性被拒絕而未能保存,從而將安全性失敗與文件 i/o 失?。ɡ绮徽_的文件名)區(qū)分開來。這種方法不會產(chǎn)生任何安全漏洞。用戶應(yīng)修改安全設(shè)置以信任您的應(yīng)用程序,否則應(yīng)用程序?qū)⒉粫\行。
' visual basicpublic sub makeabitmap()   dim b as bitmap   try      b = new bitmap(100, 100)      b.save("c:/prettypicture.bmp")   catch ex as system.security.securityexception      ' 告知用戶保存失敗。       messagebox.show("拒絕授予保存該文件的權(quán)限," & _         "未保存此位圖。")   catch ex as system.exception      ' 此處對其他異常作出反應(yīng)。      messagebox.show(ex.message)   end tryend sub// c#public void makeabitmap(){   bitmap b = null;   try    {      b = new bitmap(100, 100);      b.save("c://prettypicture.bmp");   }    catch (system.security.securityexception ex)    {      // 告知用戶保存失敗。       messagebox.show("拒絕授予保存該文件的權(quán)限," +          "未保存此位圖。");   }    catch (system.exception ex)    {      // 此處對其他異常作出反應(yīng)。      messagebox.show(ex.message);   }}

使用 system.security.permissions(英文)命名空間中的類、屬性和枚舉,可以對應(yīng)用程序中安全任務(wù)進行更多的控制。如果您在編寫可從其他應(yīng)用程序調(diào)用的庫,則可以讓庫驗證調(diào)用代碼的權(quán)限。例如,您只需在代碼文件的頂部添加以下程序集級別的屬性。加載該程序集時,運行時將驗證權(quán)限。如果運行時拒絕所請求的權(quán)限,程序集將無法加載并且將引發(fā)一個安全異常。如果向獨立的應(yīng)用程序添加此屬性,則應(yīng)用程序可能不會運行。如果此屬性出現(xiàn)在類庫中,則可能不會在運行時加載該庫。您需要在調(diào)用此類庫的代碼中添加 try/catch 塊。
' visual basic<assembly: system.security.permissions.fileiopermissionattribute( _securityaction.requestminimum, write:="c:/prettypicture.bmp")> // c#[assembly: system.security.permissions.fileiopermissionattribute(securityaction.requestminimum, write="c://prettypicture.bmp")]

您也可以專門向運行時請求權(quán)限,下面的示例中使用了 demand 方法。運行時可能允許或拒絕該請求。拒絕請求是通過引發(fā)安全異常來實現(xiàn)的。您可以按如下所示重新編寫代碼,以明確請求寫入位圖文件的權(quán)限:
' visual basicpublic sub makeabitmap()   dim filename as string = "c:/prettypicture.bmp"   dim permission as fileiopermission = _       new fileiopermission(fileiopermissionaccess.write, _       filename)   dim b as bitmap = nothing   try      b = new bitmap(100, 100)      permission.demand()      b.save(filename)   catch ex as system.security.securityexception      ' 告知用戶保存失敗。       messagebox.show("拒絕授予保存該文件的權(quán)限," & _         "未保存此位圖。")   catch ex as system.exception      ' 此處對其他異常作出反應(yīng)。      messagebox.show(ex.message)   end tryend sub// c#using system.security.permissions;public void makeabitmap(){   string filename = "c://prettypicture.bmp";   fileiopermission permission = new       fileiopermission(fileiopermissionaccess.write,       filename);   bitmap b = null;   try    {      b = new bitmap(100, 100);      permission.demand();      b.save(filename);   }    catch (system.security.securityexception ex)    {      // 告知用戶保存失敗。       messagebox.show("拒絕授予保存該文件的權(quán)限," +          "未保存此位圖。");   }    catch (system.exception ex)    {      // 此處對其他異常作出反應(yīng)。      messagebox.show(ex.message);   }}

測試


開發(fā)部分信任區(qū)域的第二步是在多個環(huán)境中進行測試,尤其是在您的 intranet 和 internet 上。這將強制引發(fā)安全異常。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 石家庄市| 和平区| 浦县| 上高县| 依兰县| 滁州市| 武平县| 绿春县| 乐陵市| 嘉峪关市| 辽阳市| 蓝田县| 左贡县| 华蓥市| 绿春县| 长治市| 扶余县| 汶上县| 巩留县| 焦作市| 阜平县| 师宗县| 白玉县| 永善县| 衡水市| 汉阴县| 嘉祥县| 依安县| 娱乐| 稷山县| 额尔古纳市| 洛阳市| 彭山县| 黄冈市| 云和县| 葵青区| 鄂托克旗| 北流市| 武安市| 镇平县| 淳安县|