转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
ASP.NET 安全性         ★★★★

ASP.NET 安全性

作者:闵涛 文章来源:闵涛的学习笔记 点击数:6747 更新时间:2009/4/23 10:44:53
>

已将本地 ASPNET 帐户明确配置为使用尽可能最少的权限集运行 ASP.NET Web 应用程序。如果可能,尽量使用 ASPNET。

和 Machine.config 中的 <processModel> 元素所配置的一样,默认情况下,ASP.NET Web 应用程序使用此帐户运行。

<processModel userName="machine" password="AutoGenerate" />

machine 用户名表示 ASPNET 帐户。当安装 .NET 框架时,使用加密型密码创建该帐户。除了在安全帐户管理器 (SAM) 数据库中进行配置外,密码还存储在本地计算机上的本地系统授权 (LSA) 中。当系统启动 ASP.NET 辅助进程时,系统就会从 LSA 中检索密码。

如果应用程序访问网络资源,则 ASPNET 帐户必须能够由远程计算机验证身份。您有两种选择:

将 ASPNET 帐户的密码重置为某个已知值,然后在远程计算机上创建一个重复帐户(具有相同的名称和密码)。在以下情况下,此方法是惟一的选择:

Web 服务器和远程计算机位于单独的域中,并且域间没有信任关系。

Web 服务器和远程计算机由防火墙隔开,并且您不想打开支持 Windows 身份验证所需的端口。

如果您主要关心管理简便性问题,请使用权限最少的域帐户。

要避免必须手动更新和同步密码,可以使用权限最少的域帐户运行 ASP.NET。一定要完全锁定域帐户以减轻进程攻击的威胁。如果某个攻击者设法攻击了 ASP.NET 辅助进程,则他或她可以访问域资源,除非该帐户已完全锁定。

如果您使用本地帐户而且该帐户已被攻击,则惟一遭受攻击的计算机是您在上面创建重复帐户的计算机。如果您使用域帐户,则该帐户对域中的每台计算机都是可见的。但是,该帐户仍然需要拥有访问这些计算机的权限。

元素

Machine.config 文件中的 <processModel> 元素包含 userNamepassword 属性,这些属性指定应该使用哪些帐户来运行 ASP.NET 辅助进程 (Aspnet_wp.exe)。

与传统 ASP 应用程序的运行方式相比,ASP.NET 代码从不在 dllhost.exe 进程中运行或作为 IWAM_MACHINENAME 帐户运行,即使在 IIS 中将应用程序保护级别设置为“高(独立)”。

发送到 IIS 的 ASP.NET 请求被直接路由到 ASP.NET 辅助进程 (Aspnet_wp.exe)。ASP.NET ISAPI 扩展 Aspnet_isapi.dll 在 IIS (Inetinfo.exe) 进程地址空间中运行。(这是由 InProcessIsapiApps 元数据库项控制的;不要修改该元数据库项)。ISAPI 扩展负责将请求路由到 ASP.NET 辅助进程。然后,ASP.NET 应用程序在 ASP.NET 辅助进程中运行,其中应用程序域提供隔离边界。

在 IIS 6 中,您可以通过配置应用程序池来隔离 ASP.NET 应用程序,其中每个池都有自己的应用程序实例。

您可以使用多种方法来配置 <processModel> userName 属性。例如:

"machine"。辅助进程作为最少权限的默认 ASPNET 帐户运行。此帐户拥有网络访问权限,但不 能在网络上的任何计算机上验证该帐户的身份,因为该帐户是计算机的本地帐户,并且没有颁发机构担保此帐户。在网络上,此帐户表示为“MachineName\ASPNET”。

"system"。辅助进程作为本地 SYSTEM 帐户运行。此帐户在本地计算机上具有广泛的权限,而且还能够使用计算机的凭证访问网络。在网络上,此帐户表示为“DomainName\MachineName$”。

“特定验证信息”。当您为 userNamepassword 提供凭证时,请记住最少权限原则。如果您指定本地帐户,则在网络上不能对 Web 应用程序进行身份验证,除非您在远程计算机上创建重复帐户。如果您选择使用权限最少的域帐户,请确保它仅有权访问网络上所需的计算机。

存储加密的凭证

如果您使用自定义凭证,请使用 aspnet_setreg.exe 工具在注册表中存储加密的凭证。避免在 machine.config 中存储明文凭证。

有关这个工具的详细信息及下载,请参见 Microsoft 知识库文章 Q329290“HOWTO:Use the ASP.NET Utility to Encrypt Credentials and Session State Connection Strings”。

以下示例显示了这个工具使用前和使用后 userNamepassword 属性的格式。请注意该属性值如何指向安全的注册表项和包含加密凭证的命名值。

<!-- Before -->
<processModel userName="SomeCustomAccount"
              password="ClearTextPassword" . . ./>

<!-- After -->
<processModel
        userName="registry:HKLM\SOFTWARE\YourSecureApp\processModel\
                  ASPNET_SETREG,userName"
        password="registry:HKLM\SOFTWARE\YourSecureApp\processModel\
                  ASPNET_SETREG,password" . . ./>

更多信息

有关从 ASP.NET Web 应用程序访问网络资源的详细信息,请参见本章后面的“访问网络资源”。

有关如何创建用于运行 ASP.NET 的自定义帐户的详细信息,请参见“How To Create a Custom Account to Run ASP.NET”。

返回页首返回页首

模拟

随时 FileAuthorizationModule 的引入以及网关守卫和信任边界的有效使用,现在看来,模拟技术在 ASP.NET 中是弊大于利。

模拟和本地资源

如果使用模拟并且从 Web 应用程序代码访问本地资源,则必须配置附加到每个受保护资源的 ACL,以包含一个至少授予已验证用户“读”访问权限的 ACE。

更好的方法是避免使用模拟,将权限授予 ASP.NET 进程帐户,并使用 URL 授权、文件授权以及基于角色的声明性和命令性检查组合。

模拟和远程资源

如果您使用模拟,然后从 Web 应用程序代码访问远程资源,则除非使用基本身份验证、窗体身份验证或 Kerberos 身份验证,否则访问将会失败。如果您使用 Kerberos 身份验证,则必须将用户帐户相应地配置为使用委派。在 Active Directory 中,必须将它们标记为“敏感帐户,不能被委派”。

更多信息

有关如何配置 Kerberos 委派的详细信息,请参见:

Intranet Security”一章中的“将原调用者传递到数据库”。

How To Implement Kerberos Delegation for Windows 2000”。

模拟和线程

如果某个正在模拟的线程创建了一个新线程,则该新线程将继承 ASP.NET 进程帐户的安全性上下文,而不是继承被模拟帐户的安全性上下文。

返回页首返回页首

访问系统资源

默认情况下,ASP.NET 不执行模拟。因此,如果 Web 应用程序访问本地系统资源,则它使用与 Aspnet_wp.exe 辅助进程相关联的安全性上下文完成此任务。安全性上下文是由运行辅助进程使用的帐户决定的。

访问事件日志

权限最少的帐户拥有足够的权限,能够使用现有事件源将记录写入事件日志中。但是,它们没有足够的权限来创建新的事件源,这要求在下面的注册表配置单元底下设置一个新项。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\<log>

为了避免出现这种问题,请在安装时创建由应用程序使用的事件源(如果可以使用管理员权限的话)。一个好的办法是使用可由 Windows Installer(如果使用 .msi 部署的话)或 InstallUtil.exe 系统实用程序(如果没有使用 .msi 部署)实例化的 .NET 安装程序类。

如果在安装时无法创建事件源,则必须将权限添加到以下注册表项中,并授予某个被模拟帐户的 ASP.NET 进程帐户访问权限(如果应用程序使用模拟的话)。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog 

帐户必须拥有以下最少权限:

查询项值

设置项值

创建子项

枚举子项

通知

在将权限应用于注册表后,可以使用以下代码从 ASP.NET 写入应用程序事件日志:

string source = "Your Application Source";
string logToWriteTo = "Application";
string eventText = "Sample Event";

if (!EventLog.SourceExists(source))
{
  EventLog.CreateEventSource(source, logToWriteTo);
}
EventLog.WriteEntry(source, eventText, EventLogEntryType.Warning, 234);
  

访问注册表

应用程序访问的任何注册表项要求在 ACL 中使用 ACE,以便至少授予 ASP.NET 进程帐户“读”访问权限。

更多信息

有关安装程序类和InstallUtil.exe 实用工具的详细信息,请参见 MSDN 上的 .NET 框架 SDK 的“.NET 框架工具”部分。

返回页首返回页首

访问 COM 对象

在传统 ASP 中,使用单线程单元 (STA) 线程池中的线程来处理请求。在 ASP.NET 中,使用多线程单元 (MTA) 线程池中的线程来处理请求。这会给调用单元模型对象的 ASP.NET Web 应用程序造成不利影响。

单元模型对象

当 ASP.NET Web 应用程序调用单元模型对象(如 Visual Basic 6 COM 对象)时,需要注意以下两个问题:

您必须用 AspCompat 指令标记 ASP.NET 页面(如下所示)。

<%@ Page Language="C#" AspCompat="True" %>

不要在特定的 Page 事件处理程序以外创建 COM 对象。始终在 Page 事件处理程序(例如, Page_LoadPage_Init)中创建 COM 对象。不要在页面的构造函数中创建 COM 对象。

需要 AspCompat 指令

默认情况下,ASP.NET 使用 MTA 线程处理请求。在从 ASP.NET 调用单元模型对象时,将会导致线程切换,这是因为 MTA 线程不能直接访问单元模型对象(COM 将使用 STA 线程)。

如果指定 AspCompat,则会由 STA 线程处理页面。这可以避免从 MTA 到 STA 的线程切换。如果 Web 应用程序使用模拟功能,从安全角度讲这是非常重要的,因为线程切换将会导致丢失模拟令牌。新线程将没有关联的模拟令牌。

ASP.NET Web 服务不支持 AspCompat 指令。这意味着,在从 Web 服务代码调用单元模型对象时,将会发生线程切换并且丢失线程模拟令牌。这通常导致出现“拒绝访问”异常错误。

更多信息

有关详细令牌,请参见以下知识库文章:

文章 Q303375“INFO:XML Web Services and Apartment Objects

文章 Q325791“PRB:Access Denied Error Message Occurs When You Impersonate an Account in ASP.NET and Then Call STA COM Components

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ...  下一页 >> 


[C语言系列]NET 中C#的switch语句的语法  [系统软件]托拽Explore中的文件到VB.net的窗口
[系统软件]Boost库在XP+Visual C++.net中的安装  [常用软件]新配色面板:Paint.Net3.0RC1官方下载
[常用软件]用内建的“Net Meeting”聊天  [VB.NET程序]Henry的VB.NET之旅(三)—共享成员
[VB.NET程序]Henry的VB.NET之旅(二)—构造与析构  [VB.NET程序]Henry的VB.NET之旅(一)—失踪的窗体
[VB.NET程序]在托盘上显示Balloon Tooltip(VB.NET)  [VB.NET程序]Henry手记-VB.NET中动态加载Treeview节点(二)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台