器传递到服务器,并且它们缓存在 Web 服务器的内存中。可以使用 IIS 在传递过程中保护凭证,但只要可能就应该避免在 Web 服务器上缓存明文凭证。
使用原调用者访问远程资源
1.
将 IIS 配置为使用集成 Windows (Kerberos)、证书(带 IIS 证书映射)或基本身份验证。
2.
将 ASP.NET 配置为使用 Windows 身份验证和模拟。 <authentication mode="Window" />
<identity impersonate="true" />
3.
如果使用 Kerberos 委派,请将 Active Directory 帐户配置为使用委派。
更多信息
•
有关配置 Kerberos 委派的详细信息,请参见“How To Implement Kerberos Delegation for Windows 2000”。
•
有关 IIS 证书映射的详细信息,请参见 http://www.microsoft.com/technet/treeview/default.asp?url=/technet/prodtechnol/ad/windows2000/howto/mapcerts.asp。
•
有关 ASP.NET 模拟的详细信息,请参见 MSDN 中的 .NET 框架开发人员指南。
访问 UNC 文件共享上的文件
如果应用程序需要使用 ASP.NET 访问统一命名约定 (UNC) 共享上的文件,则一定要添加共享文件夹的 NTFS 权限。您还需要设置共享的权限,以便授予 ASP.NET 进程帐户或模拟的标识至少“读”访问权限(如果将应用程序配置为使用模拟的话)。
访问非 Windows 网络资源
如果应用程序需要访问非 Windows 资源(例如位于非 Windows 平台上的数据库或大型机应用程序),则需要考虑以下问题:
•
与资源相关的网关守卫和信任边界是什么?
•
身份验证需要哪些凭证?
•
资源是否需要知道原调用者的标识,或者它是否信任调用应用程序(使用固定标识或服务标识)?
•
与建立连接相关的性能开销有多大?如果开销很大,则可能需要实现连接池;例如,使用 Enterprise Services 的对象池功能。
如果资源需要能够对原调用者进行身份验证(并且不能选用 Windows 身份验证),则可以选择以下方法:
•
使用(方法调用)参数传递凭证。
•
在连接字符串中传递凭证。使用 SSL 或 IPSec 保护通过网络传递的明文凭证。
在应用程序中安全地存储凭证,例如使用 DPAPI。有关安全地存储数据库连接字符串的详细信息,请参见“数据访问安全性”一章中的“安全存储数据库连接字符串”。
•
使用两个平台都能访问的集中数据存储进行身份验证;例如,LDAP 目录。
返回页首
安全通信
使用 SSL 保护浏览器和 Web 服务器之间通信链路的安全。SSL 提供消息机密性和消息完整性。使用 SSL 和/或 IPSec 提供从 Web 服务器到应用程序服务器或数据库服务器的安全通道。
更多信息
有关安全通信的详细信息,请参见“Secure Communication”一章。
返回页首
存储机密
Web 应用程序通常需要存储机密。需要妥善保管这些机密,以防止不道德的管理员和有恶意的 Web 用户进行访问,例如:
•
不道德的管理员。不应该授予不道德的管理员和其他用户查看特权信息的权限。例如,不应该授予 Web 服务器管理员读取网络中 SQL Server 计算机上的 SQL Server 登录帐户密码的权限。
•
恶意的 Web 用户。即使可以使用某些组件(例如 FileAuthorizationModule)禁止用户访问特权文件(如果攻击者确实获得访问配置文件的权限),文件中的机密也不应该以纯文本形式存储。
机密的典型示例包括:
•
SQL 连接字符串。一个常见的错误是以纯文本形式存储用户名和密码。建立使用 Windows 身份验证而不是 SQL 身份验证。如果不能使用 Windows 身份验证,请参见“数据访问安全性”一章中的以下部分,它们介绍了其他的安全方案:
•
“安全地存储数据库连接”
•
“安全通信”
•
SQL 应用程序角色使用的凭证。必须使用需要角色名及相关密码的存储过程激活 SQL 应用程序角色。有关详细信息,请参见“数据访问安全性”一章中的“授权”。
•
Web.config 中的固定标识。例如: <identity impersonate="true" userName="bob" password="inClearText"/>
aspnet_setreg.exe 实用工具允许您将明文凭证替换为指向包含加密凭证的安全注册表项的指针。
•
Machine.config 中的进程标识。例如: <process userName="cUsTuMUzerName" password="kUsTumPazzWerD" >
按照 <identity> 元素,您必须使用 aspnet_setreg.exe 将加密凭证存储在注册表中。
•
用于安全地存储数据的密钥。无法在软件中安全地存储密钥。但是,可以使用某些任务降低风险。例如,创建一个自定义的配置节处理程序,它使用不对称加密对会话密钥进行加密。然后,可以将会话密钥存储在配置文件中。
•
SQL Server 会话状态。要使用 SQL 服务器管理 ASP.NET Web 应用程序会话状态,请使用以下 Web.config 设置。 <sessionState … stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;
user id=UserName;password=MyPassword" />
aspnet_setreg.exe 也支持 <sessionState> 元素中的 stateConnectionString 和 sqlConnectionString 属性,该元素允许您将这些值以加密格式存储到注册表中。
•
用于根据数据库进行窗体身份验证的密码。
如果应用程序根据数据库检验身份验证凭证,请不要将密码存储在数据库中。使用带有 Salt 值的密码哈希值并对哈希值进行比较。
有关更多信息,请参见“数据访问安全性”一章中的“对数据库进行用户身份验证”。
在 ASP.NET 中存储机密的选项
.NET Web 应用程序开发人员可以使用多种方法来存储机密。它们是:
•
“.NET安全类”。.NET 框架包含可用于加密和解密的类。这些方法要求安全地存储加密密钥。
•
“数据保护API” (DPAPI)。DPAPI 是一对 Win32 API,它使用从用户密码派生的密钥对数据进行加密和解密。在使用 DPAPI 时,您并不需要进行密钥管理。操作系统将对作为用户密码的密钥进行管理。
•
“COM+构造字符串”。如果应用程序使用服务组件,则可以在对象构造字符串中存储机密。该字符串以明文形式存储在 COM+ 目录中。
•
CAPICOM。这是一个 Microsoft COM 对象,它提供对基础加密 API 基于 COM 的访问。
•
Crypto API。这些 API 是执行加密和解密的低级 Win32 API。
更多信息
有关详细信息,请参见 MSDN 上 Platform SDK 中的加密技术、CryptoAPI 和 CAPICOM 条目。
考虑将机密存储在单独逻辑卷上的文件中
考虑将 Web 应用程序目录安装到操作系统所在卷以外的逻辑卷上(例如 E: 而不是 C:)。这意味着 Machine.config(位于 C:\WINNT\Microsoft.NET 下)和其他可能包含机密的文件(例如通用数据链接 (UDL) 文件)都位于 Web 应用程序目录以外的逻辑卷上。
此方法的基本原理是防止出现可能的文件规范化和目录遍历错误,因为:
•
文件规范化错误可能会公开 Web 应用程序文件夹中的文件。
注 文件规范化例程返回文件路径的规范形式。这通常是绝对路径名,其中已完全解析所有相对引用和对当前目录的引用。
•
目录遍历错误可能会公开同一逻辑卷上其他文件夹中的文件。
公开其他逻辑卷上文件的上述类型错误尚未发布。
返回页首
保护会话和视图状态
Web 应用程序必须管理各种类型的状态,其中包括视图状态和会话状态。本节讨论 ASP.NET Web 应用程序的安全状态管理。
保护视图状态
如果 ASP.NET Web 应用程序使用视图状态:
•
按如下所示将 enableViewStateMac 设置为 true,以确保视图状态的完整性(确保在传递过程中没有对它进行修改)。这样,在从客户端发回页面时,ASP.NET 就会在该页面的视图状态上生成消息身份验证代码 (MAC)。 <% @ Page enableViewStateMac=true >
•
配置 Machine.config 中 <machineKey> 元素的 validation 属性,指定数据检验所使用的加密类型。请考虑 validation 属性的以下几方面的问题:
•
安全哈希算法 1 (SHA1) 生成的哈希大小比消息摘要 5 (MD5) 大,因而可以认为它更安全。但是,在传递过程中或在客户端可能会解码使用 SHA1 或 MD5 保护的视图状态,并可能以纯文本形式进行查看。
•
使用三重数据加密标准 (3DES) 检测视图状态中的变化,并且还可以在传递过程中对视图状态进行加密。在处于这种状态时,即使视图状态被解码,也不能以纯文本形式进行查看。
保护 Cookies
在传递过程中,应该使用 SSL 保护包含身份验证或授权数据或其他机密数据的 Cookie。对于窗体身份验证,可以使用 FormsAuthentication.Encrypt 方法加密以 Cookie 形式在客户端和服务器之间传递的身份验证票证。
保护 SQL 会话状态
默认(进程内) ASP.NET 会话状态处理程序会受到某些限制。例如,它不能在网络场中的其他计算机上运行。为了克服此限制,ASP.NET 允许在 SQL Server 数据库中存储会话状态。
可以在 Machine.config 或 Web.config 中配置 SQL 会话状态。machine.config 的默认设置如下所示。 <sessionState mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
stateNetwo上一页 [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节点(二)
|