<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    http://www.tkk7.com/ebecket 返還網
    隨筆-140  評論-11  文章-131  trackbacks-0
     如果你正在開發(fā)一個通用型的Web產品,比如BBS、CMS、BLOG這類的,那么,建議你閱讀以下本篇文章。

      非通用型的Web程序或產品,通常不會和ASP.NET中等安全模式打交道,因為面對的用戶群體會比較固定,或者部署環(huán)境是可以由程序提供者決定的。

      但在做通用型的Web產品的時候,你就要和各種人打交道了,有的站長用的是國外空間,比如GoDaddy,外國的空間商通常會把ASP.NET代碼執(zhí)行權限控制在中等安全模式。

      而在中等安全模式下,很多我們習以為常的事情都是做不了的。

      中等安全模式是什么?

      可能很多人都沒接觸過中等安全模式,我在參與bbsmax項目之前,我也不知道有中等安全模式這么個東西。

      簡單來說,ASP.NET提供了一個簡單設置代碼執(zhí)行權限的方案,叫做“信任級別”。

      它默認提供5種信任級別,分別是:FullTrust、High、Medium、Low、Minimal。

      每個信任級別的設置,分別對應于一組代碼權限設置。

      這個方案,讓網站部署者可以通過web.config快速設置網站的托管代碼執(zhí)行權限。

      通過對web.config的<system.web>/<trust>節(jié)點的level屬性值進行設置,就可以將ASP.NET程序設置到不同的信任級別。

      ASP.NET安裝完,所有網站默認都是FullTrust信任級別,也是最高信任級別。

      本文說的“中等安全模式”就是對應于Medium信任級別。

      因為托管代碼執(zhí)行權限模型不是本文討論的重點,所以我這里只做簡單的說明,不深入討論ASP.NET安全級別設置的實現原理,實現原理可以參考本文最后給出的幾個連接。

      中等安全模式會有哪些影響?

      以下是我和我的同事在ASP.NET中等安全模式下曾經遇到過的一些問題:

      1. 基于VirtualPathProvider的模板機制不能用,因為VirtualPathProvider至少需要運行在High模式。

      2. BuildProvider不能用,意味著你想自己添加自己的語言實現也不能用了,不過大部分項目不會用到這么高級的東西。

      3. CodeDom、Emit不能用了,這下慘了,什么Ioc、AOP,動態(tài)注入的高科技玩意兒,全都廢了,這些不是基于CodeDom的就是基于Emit的。

      4. 通過aspx頁面接管文件下載也不行了,Response寫文件流到客戶端需要更高的代碼執(zhí)行權限。

      5. 大文件上傳也別想了,因為大文件上傳萬變不離HttpWorkRequst,獲取HttpWorkRequst的代碼需要FullTrust模式。

      6. SQLite不能用了,因為中等安全模式下沒有非托管代碼調用權限,所以除了SQLite外,涉及到非托管代碼調用的,也都廢掉了。

      7. Access數據不能用OleDb連接了,因為中等安全模式下,OleDbClient是不能用的,你只能用ODBC數據源。

      所以,如果要考慮允許讓用戶把程序部署到中等安全模式下,那就越早做中等安全模式的兼容性測試越好。

      因為很多不能用的東西,都是涉及到基礎結構的。

      比如,SQLite和Access不能用,你的程序如果正巧就只做這兩個數據庫的版本,咋辦?

      比如,文件下載不能通過Response寫文件流的方式,你的程序正巧又是這么做防盜鏈,咋辦?

      中等安全模式要求那么苛刻,怎么對付?

      只能繞道走了,要不然怎么辦?方法還是有的,得不斷嘗試。

      VirtualPathProvider不能用,BuildProvider也不能用,但是又需要有自己的一套模板語法。那只好在頁面訪問前生成aspx頁面,再做URL重寫了。

      說起來很簡單,就一句話。但是這中間我不知道寫了多少代碼,做了多少次試驗,才找到最佳方案。

      所以,你的方法還是得你自己找。

      以下是判斷程序是否運行在中等安全模式的代碼:

      if (SecurityManager.IsGranted(new AspNetHostingPermission(AspNetHostingPermissionLevel.Medium)))

      {

      }

      如果有遇到不是必須執(zhí)行的邏輯,比如獲取程序內存占用率或者大文件上傳,那就可以先判斷下,再決定是否調用。

      根據資料顯示,把程序集部署到GAC中,可以獲得FullTrust級別的權限,不過我沒有實際試過。

    posted on 2010-01-25 20:41 becket_zheng 閱讀(200) 評論(0)  編輯  收藏 所屬分類: C#
    主站蜘蛛池模板: 免费成人黄色大片| 亚洲成a人片在线观看播放| 暖暖免费日本在线中文| 亚洲春色另类小说| 又粗又大又长又爽免费视频| 精品熟女少妇aⅴ免费久久| 亚洲视频国产视频| 亚洲?v女人的天堂在线观看| 久久久久久国产精品免费无码 | 国产成人免费AV在线播放| 亚洲人成电影在线观看网| 免费v片视频在线观看视频| 国产精品区免费视频| 亚洲a∨无码一区二区| 亚洲AV乱码久久精品蜜桃| 日韩视频在线免费| 最近2018中文字幕免费视频| 男男gay做爽爽的视频免费| 精品亚洲aⅴ在线观看| 亚洲狠狠爱综合影院婷婷| 久草视频免费在线| 两性色午夜免费视频| 亚洲日本天堂在线| 亚洲三级电影网址| 亚洲第一黄片大全| 嫩草影院免费观看| 24小时日本韩国高清免费| 国产高清视频免费在线观看| 亚洲精品美女久久7777777| 激情内射亚洲一区二区三区| 中文字幕精品亚洲无线码一区 | 一级毛片在线免费视频| 亚洲色欲色欲www在线丝| 免费一级毛片在线播放放视频| 午夜成年女人毛片免费观看| 亚洲av无码不卡久久| 曰批全过程免费视频播放网站| 亚洲va在线va天堂va四虎| 在线免费观看国产视频| 永久看日本大片免费35分钟| 在线免费播放一级毛片|