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

ASP.NET 安全性

作者:闵涛 文章来源:闵涛的学习笔记 点击数:6751 更新时间:2009/4/23 10:44:53
器传递到服务器,并且它们缓存在 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> 元素中的 stateConnectionStringsqlConnectionString 属性,该元素允许您将这些值以加密格式存储到注册表中。

用于根据数据库进行窗体身份验证的密码

如果应用程序根据数据库检验身份验证凭证,请不要将密码存储在数据库中。使用带有 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节点(二)
教程录入: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……
    咸宁网络警察报警平台