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

  • 相关阅读:
    java 语言里 遍历 collection 的方式
    struts2启动报错com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1
    mysql 查看表的类型
    memcached—向memcached中保存Java实体需注意的问题
    一个关于 UIPickerView 的 bug
    Wireshark数据抓包教程之安装Wireshark
    Mysql第四天 数据库设计
    产品经理怎样才干把一件事做出色
    Tokyo Tyrant(TTServer)系列(三)-Memcache协议
    Unity3D
  • 原文地址:https://www.cnblogs.com/mahuanpeng/p/5426157.html
Copyright © 2011-2022 走看看