通過對(duì)程序集進(jìn)行強(qiáng)命名并為該程序集添加策略,可以方便地為個(gè)別程序集處理代碼訪問安全性。但是,作為動(dòng)態(tài)頁編譯的結(jié)果,將動(dòng)態(tài)生成許多 asp.net 程序集,因此這些程序集未進(jìn)行強(qiáng)命名,所以需要附加功能。
asp.net 允許您向應(yīng)用程序分配對(duì)應(yīng)于一組預(yù)定義權(quán)限的可配置信任級(jí)別。默認(rèn)情況下(除非顯式更改配置),應(yīng)用程序?qū)⒔邮盏脚c它們提供的證據(jù)相稱的信任級(jí)別。例如,本地應(yīng)用程序必須在 mycomputer 區(qū)域中使用 full 信任權(quán)限集運(yùn)行,位于通用命名規(guī)則 (unc) 共享上的應(yīng)用程序必須在 intranet 區(qū)域中使用 localintranet 限制權(quán)限集運(yùn)行。如果要使用低于 full 信任的級(jí)別運(yùn)行 web 應(yīng)用程序,則您必須使用 asp.net 信任級(jí)別和策略文件中定義的某個(gè)預(yù)定義信任級(jí)別來實(shí)施部分信任策略。
您可以使用以下配置設(shè)置重寫默認(rèn)行為并將應(yīng)用程序和給定的安全策略關(guān)聯(lián)起來。
       
<location path="myapp" allowoverride="false"><trust level="high"originurl="http://www.contoso.com"/></location>
<trust> 配置標(biāo)記可應(yīng)用于計(jì)算機(jī)級(jí)別或?qū)哟谓Y(jié)構(gòu)中的任何應(yīng)用程序根目錄。
如果要為整個(gè)站點(diǎn)設(shè)置策略,您可以通過將站點(diǎn)的根目錄指定為路徑位置完成該操作,如下所示。
<location path="contososite" allowoverride="false"><trust level="high"originurl="http://www.contoso.com"/></location>
如果不想讓應(yīng)用程序能夠指定它們自己的信任級(jí)別(多數(shù)共享服務(wù)器安裝中是這種情況),則在使用 allowoverride 屬性指定 <location> 指令時(shí)應(yīng)小心。
下表列出了 <trust> 元素默認(rèn)支持的屬性。
| 屬性 | 說明 | 默認(rèn)支持的值 | 
|---|---|---|
| level | 指定應(yīng)用程序?qū)⒃谄渲羞\(yùn)行的安全區(qū)域。 | full、high、medium、low 和 minimal。 | 
| originurl | 允許管理員設(shè)置應(yīng)用程序的源的 url。 這允許依賴于宿主概念的權(quán)限正常工作 | 格式正確的 http url。 | 
默認(rèn)情況下,向與不同的安全級(jí)別關(guān)聯(lián)的策略授予的權(quán)限顯示在下表中。
| 級(jí)別 | |||||
|---|---|---|---|---|---|
| 權(quán)限 | 完全 | 高 | 中 | 低 | 最小 | 
| aspnethostingpermission | 完全 | 高 | 中 | 低 | 最小 | 
| environment | un | un | 讀:temp、tmp、os、username、computername | ||
| fileio | un | un | 讀、寫、追加、路徑發(fā)現(xiàn):應(yīng)用程序目錄 | 讀、路徑發(fā)現(xiàn):應(yīng)用程序目錄 | |
| isolatedstorage | un | un | assemblyisolationbyuser、不受限制的用戶配額 | 1 mb 配額(對(duì)于個(gè)別站點(diǎn)可能有所變化)、assemblyisolationbyuser | |
| reflection | un | reflectionemit | |||
| registry | un | ||||
| security | un | 執(zhí)行、斷言、控制主體、控制線程、遠(yuǎn)程處理配置 | 執(zhí)行、斷言、控制主體、控制線程、遠(yuǎn)程處理配置 | 執(zhí)行 | 執(zhí)行 | 
| socket | un | un | |||
| webpermission | un | un | 連接到原始主機(jī)(如果已配置) | ||
| dns | un | un | un | ||
| printing | un | 默認(rèn)打印 | 默認(rèn)打印 | ||
| oledbpermission | un | ||||
| sqlclientpermission | un | un | allowblankpassword=false | ||
| eventlog | un | ||||
| message queue | un | ||||
| service controller | un | ||||
| performance counters | un | ||||
| directory service | un | ||||
un = 無限制的
空白 = 無權(quán)限
如果某個(gè)權(quán)限級(jí)別可用但未在安全策略中明確提出,則使用 full 信任級(jí)別運(yùn)行的應(yīng)用程序可以使用它(因?yàn)樗鼈兙哂?full 信任權(quán)限集)。使用較低信任級(jí)別運(yùn)行的應(yīng)用程序?qū)⒉荒苁褂帽环秋@式權(quán)限保護(hù)的資源,除非您明確更改策略允許它使用。
如該表所示,high 信任應(yīng)用程序?qū)ξ挥谄鋺?yīng)用程序目錄中的文件具有讀/寫權(quán)限,而 low 信任應(yīng)用程序?qū)ξ挥谄鋺?yīng)用程序目錄中的文件具有只讀權(quán)限。因?yàn)?fileio 權(quán)限依賴于物理路徑(例如 c:/myapppath),所以 asp.net 在策略文件中使用標(biāo)記化的語句,這些標(biāo)記化的語句在運(yùn)行時(shí)被應(yīng)用程序的相關(guān)路徑信息替換。
請(qǐng)注意,webpermission 允許應(yīng)用程序連接到原始主機(jī)。該機(jī)制通過在給定應(yīng)用程序的 <trust> 部分提供可選的 originurl 屬性在 asp.net 中工作。originurl 屬性用于替換策略文件中的 $originhost$ 變量,如 web_hightrust.config 中的以下代碼所示。
<ipermission class="webpermission" version="1"><connectaccess><uri uri="$originhost$"/></connectaccess></ipermission>
socketpermission 獲取主機(jī)名或以點(diǎn)分隔的 ip 字符串(可能帶有通配符),webpermission 獲取包括協(xié)議的正則表達(dá)式(例如 http://backendmachine/.*)。如果要對(duì)此進(jìn)行更改,您可以使用所需的權(quán)限更改策略文件(或通過復(fù)制默認(rèn)設(shè)置創(chuàng)建新的策略文件)。例如,您可以從 asp.net 命名權(quán)限集更改 socketpermission 部分,以向端口 8080 上的“backend1”和“backend2”授予 tcp 套接字連接,如下所示。
<ipermission class="socketpermission" version="1"><connectaccess><endpoint host="backend1" transport="tcp" port="8080"/><endpoint host="backend2" transport="tcp" port="8080"/></connectaccess></ipermission>
出處:msdn
新聞熱點(diǎn)
疑難解答
圖片精選