• 第十七讲 ASP.NET安全性


    *摘要
    。输入安全性
    。身份验证
    。按权
    。ASP.NET模拟
    。存储机密
    。使用加密
    。ASP.NET安全使用最佳实践

    *输入验证
    。验证所有的输入
    -使用ASP.NET验证控件
    -对于其他情况,使用正则表达式(e.g.,Web Service 参数)
    。对于输出的数据要加密
    。使用参数化的存储过程和查询语句

    *身份验证
    。身份验证是指以下过程:获取标识凭据(如用户名和密码),并对照某一颁发机构来验证这些凭据。
    。ASP.NET提供了四个身份验证提供程序:
    -表单身份验证
    -Windows身份验证
    -Passport身份验证
    -默认身份验证

    *表单身份验证
    表单身份验证是指以下系统:将末经身份验证的请求重定向到一个超文本标记语言(HTML)表单,使用户能够在其中键入他们的凭据。在

    用户提供凭据并提交该表单后,应用程序对请求进行身份验证,然后系统以Cookie的形式发生身份验证票证。此Cookie包含凭据或用于重

    新获取标识的密钥。浏览器的后续请求自动包含此Cookie。

    *Windows身份验证
    在Windows身份验证中,IIS执行身份验证,并将经过身份验证的标记传递给ASP.NET工作进程。使用Windows身份验证的优点是它需要的编

    码最少。在将请求传递给ASP.NET之前,您可能需要使用Windows身份验证来模拟IIS进行验证的Windows用户账户。

    *Passport身份验证
    Passport身份验证是Microsoft提供的集中式身份验证服务,它为成员站点提供单一登录和核心配置文件服务。通常,当您需要跨越多个

    域的单一登录功能时,将使用Passport身份验证。

    *默认身份验证
    当Web应用程序不需要任何安全功能时,将使用默认身份验证:此安全提供程序需要匿名访问。在所有的身份验证提供程序中,默认身份

    验证为应用程序提供了最高的性能。当您使用自己的自定义安全模块时,也可以使用此身份验证提供程序。

    *表单身份验证的开发步骤
    1、将IIS配置为使用匿名访问。
    2、将ASP.NET配置为使用表单身份验证。
    3、创建登录Web表单并验证提供的凭据。
    4、从自定义数据存储中检索角色列表。
    5、创建表单身份验证票(在票中存储角色)。
    6、创建一个IPrincipal对象。
    7、将IPrincipal对象放到当前的HTTP上下文中。
    8、基于用户名/角色成员身份对用户进行授权。

    *授权
    。授权是指验证经身份验证的用户是否可以访问请求资源的过程。
    。ASP.NET提供以下授权提供程序:
    -FileAuthorization:FileAuthorizationModule类进行文件授权,而且在使用Windows身份验证时处于活动状态。
    -UrlAuthorization:UrlAuthorizationModule类进行统一资源定位器(URL)授权,它基于URL命名空间来控制授权。URL命名空间可能与

    NTFS权限使用的物理文件夹和文件路径存在很大的差异。


    *授权
    。若要建立访问特定目录的条件,则必段将一个包含<authorization>部分的配置文件放置在该目录中。为该目录设置的条件也会应用到

    其子目录,除非子目录中的配置文件重写这些条件。此部分的常规语法如所示:
    <[element][users][roles][verbs]/>元素是必需的。必须包含users或roles属性。可以同时包含二者,但这不是必需的。

    以下示例向kim和管理员角色的成员授予权限,而拒绝john和所有匿名用户:
    <authorization>
     <allow users="kim" />
     <allow roles="Admins" />
     <deny users="john" />
     <deny users="?" />
    </authorization>

    若要允许john并拒绝其他任何人,可以构造下面的配置部分。
    <authorization>
     <allow users="john" />
     <deny users="*" />
    </authorization>

    下面的示例允许每个人使用GET,但只有Kim可以使用POST。
    <authorization>
     <allow verb="GET" users="*" />
     <allow verb="POST" users="kim" />
     <deny verb="POST" users="*" />
    </authorization>

    *ASP.NET模拟
    缺省情况下,ASP.NET应用程序以本机的ASPNET账号运行。该帐号属于普通用户组,权限受到一定的限制,以保障ASP.NET应用程序运行的

    安全。但是有时需要某个ASP.NET应用程序或者程序中的某段代码执行需要特定权限的操作,比如某个文件的存取,这时就需要给该程序

    或相应的某段代码赋予某个账号的权限以执行该操作,这种方法称之为身份模拟(Impersonation)。

    *启用模拟的方法
    。在ASP.NET应用程序中使用身份模拟一般物于资源访问控制,主要有如下几种方法:
    -模拟IIS认证账号:
    <identity impersonate="true"/>
    -在某个ASP.NET应用程序中模拟指定的用户账号
    <identiey impersonate="true" userName="accountname" password="password" />
    -在代码中模拟IIS认证账号
    -在代码中模拟指定的用户账号。

    *启用模拟的方法
    。在代码中使用身份模拟更加灵活,可以在指定的代码段中使用身份模拟,在该代码段之外恢复使用ASPNET本机账号。该方法要求必须使

    用Windows的认证身份标识。

    (我创建项目试验过,用表单认证也行!不知道在实际项目中会怎么样,不过一点肯定的,效率会有影响!)

    *ASP.NET进程标识
    。使用权限最小的账户
    -使用权限最少的账户可以减少与进程攻击相关的威胁。
    。避免作为SYSTEM运行
    。域控制器和ASP.NET进程账户
    -一般情况下,不建议在域控制器上运行Web服务器,因为对服务器的攻击就是对域的攻击。
    。使用默认ASPNET账户
    -已将本地ASPNET账户明确配置为使用可能最少的权限集运行ASP.NET Web应用程序。如果可能,尽量使用ASPNET。

    *存储机密
    。Web应用程序通常需要存储机密。需要妥善保管这些机密,以防止不道德的管理员和有恶意的Web用户进行访问
    。机密的典型示例包括:
    -SQL连接字符串。一个常见的错误是以纯文本形式存储用户名和密码。
    -Web.config中的固定标识。
    -Machine.config中的进程标识。
    -用于安全地存储数据的密钥。
    -用于根据数据库进行表单身份验证的密码。

    *在ASP.NET中存储机密的选项
    NET Web应用程序开发人员可以使用多种方法来存储机密。它们包括:
    。.NET加密类。.NET框架包含可用于加密和解密的类。这此方法要求安全存储加密密钥。
    。数据保护API(DPAPI)。DPAPI是一对Win32 API,它使用从用户密码派生的密钥对数据进行加密和解密。在使用DPAPI时,您并不需要进

    行密钥管理。操作系统对作为用户密码的密钥进行管理。
    。COM+构造函数字符串。如果应用程序使用服务组件,则可以在对象构造字符串中存储机密。该字符串以明文形式存储在COM+目录中。
    。CAPICOM。这是一个Microsoft COM对象,它提供对基础加密API基于COM的访问。
    。加密API。这些API是执行加密和解密的低级Win32 API.


    *使用加密
    。使用名称空间
    System.Security.Cryptography:该命名空间提供加密服务,包括安全的数据编码和解码,以及许多其他操作,例如散列法,随机数据生 成和消息身份验证。
    。使用RNGCryptoServiceProvider,代替System.Random.

    *使用最佳实践
    。如果应用程序使用表单身份验证,而全在用户身份验证中需要考虑性能的问题,则检索角列表并将其存储在身份验证票中。
    。如果使用表单身份验证,则始终给每个请求创建一个主体并将其存储在上下文中。
    。如果角色太多而无法存储在身份验证Cookie中,则使用全局应用程序缓存来存储角色。
    。不要创建权限最少的自定义账户来运行ASP.NET。而是应更改ASPNET账户密码,并在应用程序需要访问的任何远程Windows服务器上创建重复账户。
    。如果必须创建自定义账户以运行ASP.NET,请使用权限最少的用户。
    。如果主要考虑管理问题,请使用权限最少的域账户。
    。如果使用本地账户,则必须在Web应用程序需要访问的任何远程计算机上创建重复账户;如果应用程序需要访问非信任域中的资源或者防火墙禁止Windows身份验证,则必须使用本地账户。
    。不要使用本地System账户来运行ASP.NET.
    。不要给ASPNET账户授予“充当操作系统的一部分”权限。
    。在以下情况中使用SSL:
    -在浏览器和Web服务器这间传送安全敏感信息时。
    -使用基本身份验证(以保护凭据)时。
    -使用表单身份验证进行身份验证(与个性化相对)时。
    。避免使用纯文本形式存储机密。

  • 相关阅读:
    华为平板暴力禁用wifi
    传输层与数据层架构一二谈
    内外网访问控制设计
    机房通信网设计
    list add元素覆盖之前元素问题思考
    IIS8无法调用Oracle.DataAccess .dll问题
    线程令牌
    Socket解决粘包问题2
    Socket解决粘包问题1
    Socket异步通信学习三
  • 原文地址:https://www.cnblogs.com/iceberg2008/p/1423285.html
Copyright © 2020-2023  润新知