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

ASP.NET 安全性

作者:闵涛 文章来源:闵涛的学习笔记 点击数:6748 更新时间:2009/4/23 10:44:53
rkTimeout="10" sqlConnectionString="data source=127.0.0.1;user id=sa;password=" cookieless="false" timeout="20"/>

默认情况下, SQL 脚本 InstallSqlState.sql (用于生成 SQL 会话状态使用的数据库)安装在以下位置:

C:\WINNT\Microsoft.NET\Framework\v1.0.3705

在使用 SQL 会话状态时,需要考虑以下两个问题。

必须保护数据库连接字符串的安全。

在网络上传递时,必须保护会话状态的安全。

保护数据库连接字符串

如果使用 SQL 身份验证连接到服务器,则连接字符串在包含用户名和密码的 sqlConnectionString 属性中指定。使用 aspnet_setreg.exe 实用工具在注册表中存储加密的连接字符串。以下示例显示了使用 aspnet_setreg.exe 前后的 <sessionState> 元素。

<!-- Before -->
<sessionState 
    mode="SQLServer", 
    sqlConnectionString="data source=Server;user id=userID;password=pwd" . . . />
<!-- After -->
<sessionState mode="SQLServer"
              sqlConnectionString="registry:HKLM\SOFTWARE\YourSecureApp\
              sessionState\ASPNET_SETREG,sqlConnectionString" />

如果您使用 ASP.NET 状态服务,也可以使用 aspnet_setreg.exe 来加密 stateConnectionString 属性。

如果可能,应该对 SQL Server 状态数据库使用 Windows 身份验证。这将带来其他一些优点:连接字符串不包含凭证,凭证不通常网络传递到数据库服务器。

要使用 Windows 身份验证,可以使用 ASP.NET 进程标识(通常是 ASPNET)

1.

在数据库服务器上创建一个重复的帐户(使用相同的名称和密码)。

2.

为该帐户创建 SQL 登录。

3.

ASPState 数据库中创建一个数据库用户,并将 SQL 登录映射到该新用户。

ASPState 数据库是由 InstallSQLState.sql 脚本创建的。

4.

创建一个用户定义的数据库角色,并将数据库用户添加到该角色。

5.

在数据库中为该数据库角色配置权限。

然后,可以更改连接字符串以使用受信任的连接(如下所示):

sqlConnectionString="server=127.0.0.1;
                     database=StateDatabase;
                     Integrated Security=SSPI;"

在网络上保护会话状态

在通过网络将会话状态传递到 SQL Server 数据库时,可能需要对会话状态进行保护。这取决于承载 Web 服务器和数据服务器的网络的安全性。如果已在受信任环境中对数据库进行物理保护,则可能不必采取这一额外的安全措施。

可以使用 IPSec 保护 Web 服务器和 SQL Server 之间的所有 IP 通信,或者使用 SSL 保护到 SQL Server 的链路。通过使用此方法,您可以选择只加密用于会话状态的连接,而不是在计算机之间进行的所有通信。

更多信息

有关如何设置 SQL 会话状态的详细信息,请参见 Microsoft 知识库文章 Q317604“HOW TO:Configure SQL Server to Store ASP.NET Session State”。

有关对 SQL Server 使用 SSL 的详细信息,请参见“How To Use SSL to Secure Communication with SQL Server 2000”。

有关使用 IPSec 的详细信息,请参见“How To Use IPSec to Provide Secure Communication Between Two Servers”。

返回页首返回页首

网络场注意事项

在网络场方案中,不能保证来自同一个客户端的后续请求由同一个 Web 服务器提供服务。对于状态管理和任何取决于 Machine.config 中 <machineKey> 元素所保存的属性的加密而言,这会产生不利影响。

会话状态

默认 ASP.NET 进程内会话状态处理(它镜像以前的 ASP 功能)产生服务器关系,并且不能在网络场方案中使用。对于网络场部署,必须在进程外将会话状态存储到 ASP.NET 状态服务或 SQL Server 数据库中(如前所述)。

不能依赖应用程序状态来保存网络场(将 Web 应用程序配置为在多台服务器上运行)或网络园(将 Web 应用程序配置为在多个处理器上运行)方案中的全局计数器或惟一值,因为在进程或计算机之间不能共享应用程序状态。

DPAPI

DPAPI 能够与机器存储或用户存储(需要一个已加载的用户配置文件)配合使用。如果您将 DPAPI 和机器存储一起使用,那么加密字符串是给定计算机所特有的,因此您必须在每台计算机上生成加密数据。不要在网络场或群集中的计算机之间复制加密数据。

如果将 DPAPI 和用户存储一起使用,则可以用一个漫游的用户配置文件在任何一台计算机上解密数据。

更多信息

有关 DPAPI 的详细信息,请参见“数据访问安全性”一章。

在网络场中使用窗体身份验证

如果使用窗体身份验证,则网络场中的所有服务器必须共享一个通用机密密钥,此密钥用于身份验证票证的加密、解密和验证。

机密密钥保存位于 Machine.config 的 <machineKey> 元素中。默认设置如下所示。

<machineKey validationKey="AutoGenerate" 
            decryptionKey="AutoGenerate" 
            validation="SHA1"/> 

此设置导致每台机器生成一个不同的检验和解密密钥。必须更改 <machineKey> 元素,并将通用密钥值放在网络场中的所有服务器上。

元素

可以使用 Machine.config 中的 <machineKey> 元素,配置用于加密和解密窗体身份验证 Cookie 数据和视图状态的密钥。

在调用 FormsAuthentication.EncryptFormsAuthentication.Decrypt 方法以及创建或检索视图状态时,将参考 <machineKey> 元素中的值。

<machineKey validationKey="autogenerate|value"
            decryptionKey="autogenerate|value"
            validation="SHA1|MD5|3DES" />

validationKey 属性

validationKey 属性值用于创建和检验视图状态和窗体身份验证票证的 MAC 代码。此检验属性表明在执行 MAC 生成时使用哪种算法。请注意以下方面:

在使用窗体身份验证时,此密钥与 <forms> protection 属性配合使用。如果将保护属性设置为 Validation,然后调用 FormsAuthentication.Encrypt 方法,则使用票证值和 validationKey 来计算附加到 Cookie 中的 MAC。在调用 FormsAuthentication.Decrypt 方法时,就会计算 MAC 并将它与附加到票证上的 MAC 进行比较。

在使用视图状态时,可以使用控件的视图状态和 validationKey 来计算附加到视图状态上的 MAC。在将视图状态从客户端发回时,应重新计算 MAC 并将它与附加到视图状态上的 MAC 进行比较。

decryptionKey 属性

decryptionKey 属性值用于加密和解密窗体身份验证票证和视图状态。可以使用 DES 或 Triple DES (3DES) 算法。具体的算法取决于服务器上是否安装了 Windows 2000 高度加密包。如果安装了该程序包,则使用 3DES,否则使用 DES。请注意以下方面:

在使用窗体身份验证时,密钥与 <forms> protection 属性配合使用。如果将 protection 属性设置为 Encryption,并且调用了 FormsAuthentication.EncryptDecrypt 方法,则使用指定的 decryptionKey 值加密或解密票证值。

通过使用视图状态,在将控件的视图状态值发送到客户端时,使用 decryptionKey 值对它进行加密;并在客户端将数据发回服务器时对它进行解密。

Validation 属性

此属性规定检验、加密和解密时使用哪种算法。它可以采用 SHA1、MD5 或 3DES 值。以下是这些值的描述:

SHA1。如果设置为 SHA1,则实际使用 HMACSHA1 算法。它生成 160 位(20 个字节)的输入哈希值或摘要。HMACSHA1 是一种加密哈希算法。此算法的输入密钥是由 validationKey 属性指定的。

SHA1 由于比其他算法具有更大的摘要,因此成为常用的算法。

MD5。它使用 MD5 算法生成 20 个字节的哈希值。

3DES。它使用 Triple DES (3DES) 算法加密数据。

在将验证属性设置为 3DES 时,窗体身份验证实际上并不使用它,而是使用 SHA1。

更多信息

有关如何创建适于放在 Machine.config 中的密钥的信息,请参见 Microsoft 知识库文章 Q312906“HOW TO:Create Keys by using Visual C# .NET for Use in Forms Authentication”。

有关 Windows 2000 高度加密包的详细信息,请参见 http://www.microsoft.com/windows2000/downloads/recommended/encryption/

返回页首返回页首

小结

本章介绍了各种保护 ASP.NET Web 应用程序的技术和方法。本章提供的大多数指南和建议同样适用于开发 ASP.NET Web 服务和由 ASP.NET 驻留的 .NET Remoting 对象。概括如下:

如果应用程序使用窗体身份验证,而且在用户身份验证中需要考虑性能问题,则检索角色列表并将其存储在身份验证票证中。

如果使用窗体身份验证,则始终给每个请求创建一个主体并将其存储在上下文中。

如果角色太多而无法存储在身份验证 Cookie 中,则使用全局应用程序缓存来存储角色。

不要创建权限最少的自定义帐户来运行 ASP.NET。而是应该更改 ASPNET 帐户密码,并在应用程序需要访问的任何远程 Windows 服务上创建重复帐户。

如果必须创建自定义帐户以运行 ASP.NET,请使用权限最少的用户。例如:

如果主要考虑管理问题,请使用权限最少的域帐户。

如果使用本地帐户,则必须在 Web 应用程序需要访问的任何远程计算机上创建重复帐户;如果应用程序需要访问非信任域中的资源或者防火墙禁止 Windows 身份验证,则必须使用本地帐户。

不要使用本地 SYSTEM 帐户来运行 ASP.NET。

不要授予 ASPNET 帐户“充当操作系统的一部分”权限。

在以下情况中使用 SSL:

在浏览器和 Web 服务器之间传送安全敏感信息时。

 << 上一页  [11] [12]  下一页


[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……
    咸宁网络警察报警平台