人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁(yè)面

Visual Basic .NET 與 Visual C# .NET 程序員需要處理的安全問(wèn)題 (zt)

Visual Basic .NET 與 Visual C# .NET 程序員需要處理的安全問(wèn)題 (zt)

更新時(shí)間:2022-10-02 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

Visual Basic .NET 和 Visual C# .NET 程序員需要解決的安全問(wèn)題
Robin Reynolds-Haertle
Visual Studio Team
Microsoft Corporation
2002 年 1 月

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

目錄

  • 簡(jiǎn)介
  • 代碼訪問(wèn)安全性
    • 完全信任
    • 部分信任
    • 部分信任環(huán)境的開發(fā)
    • 測(cè)試
    • 其他資源
  • Web 應(yīng)用程序
    • 動(dòng)態(tài)發(fā)現(xiàn)
    • 身份驗(yàn)證、模擬和委托
    • ASPNET 進(jìn)程標(biāo)識(shí)
    • 在 ASPNET 標(biāo)識(shí)下運(yùn)行時(shí)保護(hù)文件資源的安全
    • 使用 ASPNET 標(biāo)識(shí)進(jìn)行調(diào)試
  • Visual Studio .NET 開發(fā)環(huán)境中的安全機(jī)制
  • 總結(jié)

簡(jiǎn)介


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

代碼訪問(wèn)安全性


代碼訪問(wèn)安全性是 .NET 框架的一個(gè)系統(tǒng),它通過(guò)控制代碼的執(zhí)行來(lái)控制對(duì)資源的訪問(wèn)。這種安全功能獨(dú)立于操作系統(tǒng)提供的安全性,并且是對(duì)操作系統(tǒng)提供的安全性的補(bǔ)充。當(dāng)用戶運(yùn)行您的應(yīng)用程序時(shí),應(yīng)用程序?qū)⒂?.NET 公共語(yǔ)言運(yùn)行時(shí)分配到五個(gè)區(qū)域之一。這五個(gè)區(qū)域是:
  • 我的電腦 - 用戶計(jì)算機(jī)上的應(yīng)用程序。
  • 本地 Intranet - 用戶的 Intranet 上的應(yīng)用程序。
  • Internet - 來(lái)自 Internet 的應(yīng)用程序。
  • 可信站點(diǎn) - 來(lái)自由 Internet Explorer 定義為“可信”站點(diǎn)的應(yīng)用程序。
  • 不可信站點(diǎn) - 來(lái)自由 Internet Explorer 定義為“受限”站點(diǎn)的應(yīng)用程序。

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

完全信任


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

部分信任


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

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

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

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


本節(jié)簡(jiǎn)要介紹了安全問(wèn)題可能會(huì)對(duì)編寫的代碼產(chǎn)生什么樣的影響。部分信任環(huán)境的開發(fā)沒(méi)有單一的解決方案。您的解決方案取決于您所編寫的應(yīng)用程序。此外,由于信任級(jí)別在應(yīng)用程序的執(zhí)行過(guò)程中可能會(huì)發(fā)生變化,因此不能僅測(cè)試現(xiàn)有的信任級(jí)別,然后就繼續(xù)執(zhí)行。
開發(fā)部分信任區(qū)域的第一步是編寫能夠識(shí)別即將發(fā)生安全異常的代碼。請(qǐng)注意以下代碼:
' 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");}

如果項(xiàng)目和項(xiàng)目程序集存儲(chǔ)在您計(jì)算機(jī)的硬盤驅(qū)動(dòng)器上,并且您是計(jì)算機(jī) Administrators 組的成員,則此方法在運(yùn)行時(shí)不會(huì)引發(fā)異常。如果將此應(yīng)用程序部署到您的 Intranet,則當(dāng)應(yīng)用程序試圖保存位圖對(duì)象時(shí),將引發(fā) System.Security.SecurityException(請(qǐng)參閱 SecurityException Class [英文])。如果此代碼周圍沒(méi)有 Try...Catch(在 Visual Basic 中)或 try...catch(在 C# 中)塊,則應(yīng)用程序?qū)⒁虍惓6K止。這會(huì)令用戶感到不滿意。如果您添加異常處理代碼,應(yīng)用程序就能夠:
  • 警告用戶應(yīng)用程序無(wú)法完成所有需要完成的任務(wù)。
  • 清除所有現(xiàn)有對(duì)象,以便 catch 塊后面的代碼能夠成功運(yùn)行。

您可以按如下所示修改保存位圖的代碼。添加的代碼將警告用戶該文件因安全性被拒絕而未能保存,從而將安全性失敗與文件 I/O 失敗(例如不正確的文件名)區(qū)分開來(lái)。這種方法不會(huì)產(chǎn)生任何安全漏洞。用戶應(yīng)修改安全設(shè)置以信任您的應(yīng)用程序,否則應(yīng)用程序?qū)⒉粫?huì)運(yùn)行。
' Visual BasicPublic Sub MakeABitmap() Dim b As Bitmap Tryb = New Bitmap(100, 100)b.Save("c:\PrettyPicture.bmp") Catch ex As System.Security.SecurityException' 告知用戶保存失敗。 MessageBox.Show("拒絕授予保存該文件的權(quán)限," & _ "未保存此位圖。") Catch ex As System.Exception' 此處對(duì)其他異常作出反應(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){// 此處對(duì)其他異常作出反應(yīng)。MessageBox.Show(ex.Message); }}

使用 System.Security.Permissions(英文)命名空間中的類、屬性和枚舉,可以對(duì)應(yīng)用程序中安全任務(wù)進(jìn)行更多的控制。如果您在編寫可從其他應(yīng)用程序調(diào)用的庫(kù),則可以讓庫(kù)驗(yàn)證調(diào)用代碼的權(quán)限。例如,您只需在代碼文件的頂部添加以下程序集級(jí)別的屬性。加載該程序集時(shí),運(yùn)行時(shí)將驗(yàn)證權(quán)限。如果運(yùn)行時(shí)拒絕所請(qǐng)求的權(quán)限,程序集將無(wú)法加載并且將引發(fā)一個(gè)安全異常。如果向獨(dú)立的應(yīng)用程序添加此屬性,則應(yīng)用程序可能不會(huì)運(yùn)行。如果此屬性出現(xiàn)在類庫(kù)中,則可能不會(huì)在運(yùn)行時(shí)加載該庫(kù)。您需要在調(diào)用此類庫(kù)的代碼中添加 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")]

您也可以專門向運(yùn)行時(shí)請(qǐng)求權(quán)限,下面的示例中使用了 Demand 方法。運(yùn)行時(shí)可能允許或拒絕該請(qǐng)求。拒絕請(qǐng)求是通過(guò)引發(fā)安全異常來(lái)實(shí)現(xiàn)的。您可以按如下所示重新編寫代碼,以明確請(qǐng)求寫入位圖文件的權(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 Tryb = New Bitmap(100, 100)permission.Demand()b.Save(filename) Catch ex As System.Security.SecurityException' 告知用戶保存失敗。 MessageBox.Show("拒絕授予保存該文件的權(quán)限," & _ "未保存此位圖。") Catch ex As System.Exception' 此處對(duì)其他異常作出反應(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){// 此處對(duì)其他異常作出反應(yīng)。MessageBox.Show(ex.Message); }}

測(cè)試


開發(fā)部分信任區(qū)域的第二步是在多個(gè)環(huán)境中進(jìn)行測(cè)試,尤其是在您的 Intranet 和 Internet 上。這將強(qiáng)制引發(fā)安全異常。

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 若羌县| 丰城市| 清远市| 军事| 潞城市| 麦盖提县| 江城| 靖边县| 府谷县| 德清县| 丰台区| 雷州市| 临沭县| 石泉县| 苍山县| 通河县| 大足县| 富阳市| 高密市| 黄梅县| 芒康县| 靖远县| 中牟县| 汨罗市| 道真| 额济纳旗| 仁怀市| 永城市| 汤阴县| 靖江市| 禄劝| 嘉黎县| 弥渡县| 惠州市| 休宁县| 天峻县| 花莲市| 盐源县| 常熟市| 井陉县| 安顺市|