web开发的安全性分析

 让隐藏域更加 安全

  在ASP.NET应用中,几乎所有HTML页面的__VIEWSTATE隐藏域中都可以找到有关应用的信息。由于__VIEWSTATE是BASE 64编码的,所以常常被忽略,但黑客可以方便地解码BASE 64数据,用不着花什么力气就可以得到__VIEWSTATE提供的详细资料。

  ■ 风险分析

  默认情况下,__VIEWSTATE数据将包含:

  ⑴ 来自页面控件的动态数据。

  ⑵ 开发者在ViewState中显式保存的数据。

  ⑶ 上述数据的密码签字。

  ■ 解决方案

  设置EnableViewStatMAC="true",启用__VIEWSTATE数据加密功能。然后,将machineKey验证类型设置成3DES,要求ASP.NET用Triple DES对称加密算法加密ViewState数据。

 

上面这段文字是摘自网络,我介绍一下关于上文中提到的设置方式:

1.启用_VIEWSTATE数据加密功能:

在网站项目的根目录下的webconfig文件中,找到<system.web>节点下的<pages>节点,设置其属性EnableViewStateMAC为true:<pages enableViewStateMac="true">

2.用Triple DES对称加密算法加密ViewState数据:

在web项目根目录下的webconfig文件中,找到<system.web>节点,添加子节点如下:

 <machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES"/>

validationKey和decryptionKey中的AutoGenerate代表让系统自动产生密钥,如果用户需要自己指定密钥,可以改成如下:

 <machineKey validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8,IsolateApps" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77,IsolateApps" validation="3DES"/>

 

关于<machineKey>元素的说明如下:

<machineKey> 元素

配置用于加密和解密 Forms 身份验证 Cookie 数据和视图状态数据的密钥,以及配置用于验证进程外会话状态标识的密钥。此节可以在计算机、站点或应用程序级别进行声明,但不能在子目录级别声明。

配置结构的示例:

<configuration>
   <system.web>
      <machineKey>

<machineKey validationKey="AutoGenerate|value[,IsolateApps]" decryptionKey="AutoGenerate|value[,IsolateApps] validation="SHA1|MD5|3DES"/> 
必需的属性
属性选项描述
validationKey   指定用于验证加密数据的密钥。当 enableViewStateMACtrue 时,可以使用 validationKey 创建一个消息验证代码 (MAC) 以确保视图状态不被篡改。validationKey 还用于生成进程外、应用程序特有的会话 ID 以确保在会话之间隔离会话状态变量。
   AutoGenerate指定 ASP.NET 生成一个随机的密钥并将其存储在本地安全机构 (LSA) 中。AutoGenerate 选项是默认值。如果将IsolateApps 修饰符添加到 validationKey 值中,ASP.NET 会使用每个应用程序的应用程序 ID 为每个应用程序生成一个唯一的加密密钥。
   value指定一个手动分配的验证密钥。必须手动设置该值以确保整个 Web 服务器网络(Web 场)具有一致的配置。此密钥长度最少为 40 个字符(20 个字节),最多为 128 个字符(64 个字节)。如果使用的密钥比最大长度短,则采用真正随机的方法来创建这些密钥,例如使用RNGCryptoServiceProvider。建议的密钥长度为 128 个十六进制字符。如果将 IsolateApps 修饰符添加到validationKey 值中,ASP.NET 会使用每个应用程序的应用程序 ID 为每个应用程序生成一个唯一的加密密钥。
decryptionKey   指定用于加密数据的密钥。decryptionKey 用于 Forms 身份验证加密和解密;当 validation 为 3DES 时,它还用于视图状态加密。
   AutoGenerate指定 ASP.NET 生成一个随机的密钥并将其存储在 LSA 中。AutoGenerate 选项是默认值。如果将 IsolateApps 修饰符添加到 decryptionKey 值中,ASP.NET 会使用每个应用程序的应用程序 ID 为每个应用程序生成一个唯一的加密密钥。
   value指定一个手动分配的密钥。必须手动将该值设置为十六进制字符串,以确保整个 Web 场具有一致的配置。在使用 DES 加密时,此密钥长度应该为 16 个字符;在使用三重 DES 加密时,此密钥长度应该为 48 个字符。如果使用的密钥比最大长度短,则应该采用真正随机的方法来创建这些密钥。ASP.NET 只能在可使用 128 位加密的计算机上使用三重 DES。如果将IsolateApps 修饰符添加到 decryptionKey 值中,ASP.NET 会使用每个应用程序的应用程序 ID 为每个应用程序生成一个唯一的加密密钥。
validation   指定用于数据验证的加密类型。
   SHA1指定 ASP.NET 使用 SHA1 加密。
   MD5指定 ASP.NET 使用 MD5 加密。
   3DES指定 ASP.NET 使用三重 DES (3DES) 加密。在指定 3DES 时,Forms 身份验证默认为 SHA1。在将 validation 属性设置为 3DES 时,视图状态验证技术使用3DES 加密。
示例

以下示例将 validationKeydecryptionKey 均设置为 AutoGenerate。指定 isolateApps 选项以便给服务器上的每个应用程序生成唯一的密钥。

<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="SHA1"/> 
要求
  • 包含在:<system.web>
  • Web 平台:IIS 5.0、IIS 5.1、IIS 6.0
  • 配置文件:Machine.config、Web.config
  • 配置节处理程序:System.Web.Configuration.MachineKeyConfigHandler

 

参考文献:http://msdn.microsoft.com/zh-cn/library/ms998288(en-us).aspx

          http://blog.csdn.net/huwei2003/archive/2009/10/09/4647008.aspx

          http://www.easewe.com/Article/Document/297.htm
          http://www.yesky.com/447/1865447_1.shtml

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值