成员资格、授权和安全性(一)

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

时间: 2024-12-17 02:42:18

成员资格、授权和安全性(一)的相关文章

MVC中的成员资格,授权,安全性

使用 Authorize 特性登录 Authorize 是 ASP.NET MVC 自带的默认授权过滤器, 可用来限制用户对操作方法的访问. 保护控制器操作 Authorize 特性在表单身份验证和 AccountController 控制器中的用法 ASP.NET MVC 的Internet Application 模板包含一个基本的 AccountController, 它支持 ASP.NET Membership 和 OAuth 验证的账户管理. Intranet Application

ASP.Net MVC 5 高级编程 第7章 成员资格、授权和安全性

第7章 成员资格.授权和安全性 7.1 安全性 ASP.NET MVC 提供了许多内置的保护机制(默认利用 HTML 辅助方法和Razor 语法进行 HTML编码以及请求验证等功能特性,以及通过基架构建的控制器白名单表单元素来防止重复提交攻击) 永远不要相信用户提交的任何数据. 实际的例子 每次渲染用户提交的数据的时候对其进行编码. 考虑好网站哪些部分允许用户匿名访问,哪些部分需要认证访问. 不要试图自己净化用户的HTML 输入,否则就会失败. 在不需要通过客户端脚本访问cookie时,使用HT

MVC 成员资格、授权和安全性

要求用Authorize 特性登陆 要求登陆系统的用户访问哪些由应用程序指定的 URL.我们可以通过使用控制器上或者控制器内部特定操作上的Authorize 操作过滤器来实现. Authorize:特性是 ASP.NET MVC 自带的默认授权过滤器,可用来限制用户对操作方法的访问.将该特性应用与控制器,就可以快速将其应用与控制器中的每个操作方法. 1.Authorize 在表单身份验证和 AccountController 控制器中的用法 *ASP.NET MVC 的 Internet App

net的成员资格登录验证总结

asp.net 提供了一套成员资格验证程序. 实际使用的时候使用 System.Web.Security  是所在的命门空间 在 ASP.NET 应用程序中,Membership 类用于验证用户凭据并管理用户设置(如密码和电子邮件地址).Membership 类可以独自使用,或者与 FormsAuthentication 一起使用,以创建一个完整的 Web 应用程序或网站的用户身份验证系统.Login 控件封装了 Membership 类,从而提供一种便捷的用户验证机制. Membership

membership与成员资格

membership成员资格是ASP.NET 成员资格为您提供了一种验证和存储用户凭据的内置方法.因此,ASP.NET 成员资格可帮助您管理网站中的用户身份验证.它包含以下功能 创建新用户和密码. 将成员资格信息(用户名.密码和支持数据)存储在 Microsoft SQL Server.Active Directory 或其他数据存储区. 对访问站点的用户进行身份验证.可以以编程方式验证用户,也可以使用 ASP.NET 登录控件创建一个只需很少代码或无需代码的完整身份验证系统. 管理密码,包括创

ASP.NET 成员资格

1. 配置表单验证 <system.web> <authentication mode="Forms" /> </system.web> 2. 创建数据存储 工具:aspnet_regsql.exe 位置:C:\Windows\Microsoft.NET\Framework64\v4.0.30319 或 C:\Windows\Microsoft.NET\Framework\v4.0.30319 3. 配置连接字符串和成员资格提供程序 <conn

此成员资格提供程序没有被配置为支持密码恢复。

MembershipUser mu = Membership.GetUser(txtUserName.Text.Trim()); txtOldPassword.Text = mu.GetPassword(); 为何以上代码会报错:此成员资格提供程序没有被配置为支持密码恢复? 查找了一下,出现以上报错,是因为密码存储不是以明文方式存入数据库的,所以无法找到密码. 此成员资格提供程序没有被配置为支持密码恢复.

ASP.NET成员资格与角色管理配置内容

Web.config中进行配置 以便于连接数据库,使用微软提供的Membership类.·····等   <?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <connectionStrings>

在SQL Server中创建用户角色及授权

参考文献 http://database.51cto.com/art/201009/224075.htm 正文 要想成功访问 SQL Server 数据库中的数据, 我们需要两个方面的授权: 获得准许连接 SQL Server 服务器的权利: 获得访问特定数据库中数据的权利(select, update, delete, create table ...). 假设,我们准备建立一个 dba 数据库帐户,用来管理数据库 mydb. 1. 首先在 SQL Server 服务器级别,创建登陆帐户(cr