成員資格、授權和安全性(一)

來源:互聯網
上載者:User

標籤:

1.  安全性:無趣但重要

  永遠都不要相信客戶提供的任何資料。

  舉例:

  • 對使用者資料的資料進行編碼,如果作為特性值顯示,進行HTML編碼;如用於JavaScript程式碼片段,進行JavasCript編碼;也可進行多層的編碼,如HTML頁面的JavaScript編碼;
  • 對於網站,需要考慮哪些頁面允許匿名訪問,哪些頁面需要認證訪問;
  • 在不需要通過客戶指令碼(大部分情況下)訪問Cookie時,使用HTTP-only cookie;
  • 外部輸入的內容包括:顯式表單、URL查詢字串、影藏表單域、Ajax請求以及外部服務結果;
  • 建議使用AntiXSS編碼器(ASP.NET4.5以後版本內建的MS Web Protection Library的一個組件)

2.  使用Authorize特性

  Authorize控制器過濾器用於設定應用程式的訪問部分,也可以用於全域操作過濾器使用。

  如何禁用匿名訪問,例如在Buy控制器上,添加Authorize特性

[Authorize]public ActionResult Buy(int id){var album = GetAlbums().Single(a => a.AlbumId == id);//Charge the user and ship the album!!!return View(album);}

Authorize特性首先執行OnAuthorization方法,該方法是IAuthorizationFilter中定義的。原始碼如下

IPrincipal user = httpContext.User;If(!user.Identity.IsAuthonticated){  return false;}if(_userSplit.Length > 0 && !_userSplit.Contains(user.Identity.Name,  StringComparer.OrdinalIgnoreCase)){  return false;}if(_userSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole)){  return false;}return true;

  安全機制驗證ASP.NET上下文httpContext.User中儲存的身份資訊。

Authoritize作為過濾器先於控制器操作執行,如果驗證失敗,返回HTTP401(未授權)的狀態代碼。這個401狀態代碼不友好,一般用HTTP302重新導向到登入介面。

MVC5中的重新導向設定:401到302重新導向的轉換過程由OWIN(Open Web Interface for .NET)中介軟體處理;基於Cookie的身份認證由CookieAuthencationHandler(包含在Microsoft.Owin.Cookies名稱空間中)處理。

ASP.NET先前版本的處理:這個重新導向由FormsAuthenticationModule 的OnLeave方法截獲,重新導向到Web.Config檔案定義的登入介面,代碼如下:

<authentication mode="Forms"> <forms loginUrl="~/Account/LogOn" timeout="2880"> </authentication>

   但是,開放重新導向功能容易成為被攻擊的對象,攻擊者可以注入惡意的URL將使用者重新導向到有害的網站,避免的方法接下章節將會介紹,本節不再敘述。

3.  使用全域過濾器保證應用程式的安全

  對大部分網站來說,基本上整個應用程式都需要授權訪問,預設授權和匿名訪問極少數頁面(如首頁和相關頁面),可以將AuthorizeAttribute配置為全域過濾器。

將以下代碼添加到RegisterGlobalFilters(\App_Start\FilterConfig.cs檔案中),將AuthorizeAttribute應用於應用程式的所有控制器當中。

 public static void RegisterGlobalFilters(GlobalFilterCollection filters) {     filters.Add(new System.Web.Mvc.AuthorizeAttribute());     filters.Add(new HandleErrorAttribute()); }

   應用執行個體(已完成上述操作):

[AllowAnoymous]
public
ActionResult LogIn(String returnUrl){ ViewBag.ReturnRul = returnUrl; return View();}

  在對應用程式所有的Control設定全域過濾器後,在方法上添加AllowAnoymous特性,實現外部的匿名訪問登入頁面。需要注意的是,AllowAnoymous特性只對標準的AuthoriseAttribute特性有效,對於自訂的過濾器不一定有效(MVC5 允許使用者自訂過濾器、全域過濾器只針對MVC控制器操作有效,不能保障Web Forms 和靜態內容或其他ASP.NET處理常式,該內容的實現方法由 web.config檔案中的authorization元素保證)。

成員資格、授權和安全性(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.