zoukankan      html  css  js  c++  java
  • 成员资格、授权和安全性(一)

    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_StartFilterConfig.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元素保证)。

  • 相关阅读:
    SpringBoot整合NoSql--(四)Session共享
    SpringBoot整合NoSql--(三)Redis集群
    SpringBoot整合NoSql--(二)MongoDB
    SpringBoot整合NoSql--(一)Redis
    SpringBoot整合持久层技术--(三)Spring Data JPA
    ArcGIS Server 10.4切片图的制作与发布
    ArcGIS api for JavaScript 3.27 聚合(cluster)
    ArcGIS api for JavaScript 3.27 按需显示需要的图层
    ArcGIS api for JavaScript 3.27 在线浏览的一些小部件
    WebGIS小理论(持续更新)
  • 原文地址:https://www.cnblogs.com/mahuanpeng/p/5426157.html
Copyright © 2011-2022 走看看