• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

(译)如何在ASP.NET中安全使用ViewState

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

原文:http://www.codeproject.com/Articles/150688/How-to-make-ViewState-secure-in-ASP-NET

介绍

ASP.NET中的ViewState是客户端的状态管理机制。ViewState通过一个ID __VIEWSTATE存储在一个隐藏的区域中。比如说:存储ViewState的信息像这样:

现在我们看下它的值。它看起来像是一个加密过的字符串。这不过是一个基于Base64编码的字符串,并不是一个加密的字符串。所以它很容易被解码。


使用Base64编码的主要原因如下:

1.Base64使字符串适合HTTP传输。

      2.它使人们读起来有点困难。

但往往使人们感到困惑,以至于认为这是个加密的字符串。

 

让我们试着使用View Decoder(Fritz Onion开发的工具)来解码字符串。

解码后,我们可以看到存储在ViewState中的真实数据。

你可以写几行代码来解码文本,并且你也会得到真实的ViewState信息。 

ViewState是如何工作的:

默认情况下,ViewState被序列化成一个Base64编码形式的字符串。在回发时,ViewState信息被加载并且被重新应用到控制层次的持久化状态中。

  

解决办法

这里有两种不同的方法可以阻止某人来解密ViewState的数据。

1.你可以使用"哈希码"来确保ViewState状态信息是'防篡改的'。你可以在你的页面中添加 EnableViewStateMAC=true指令属性来实现这个功能。MAC表示"消息认证码"。

    当我们在ViewState保存期间使用EnableViewStateMac="True"属性,ASP.NET内部使用了一个哈希码。这个哈希码是强加密的校验和。这个添加伴随着ViewState内容并且存储在一个隐藏区域中。在回发期间,这个校验数据再一次被ASP.NET验证。如果那里面有一个不匹配,这个回发将会被拒绝。

    2.第二个办法是在页面指令中设置 ViewStateEncryptionMode="Always" ,这将会加密ViewState的数据。你可以这样做:

    

ViewStateEncryptionMode 可以被设置成三种选项:

  • Always一直加密ViewState
  • Auto:如果一个控件被请求加密的时候才被加密。当这种情况发生时,这个控件必须调用Page.RegisterRequiresViewStateEncryption() 方法。
  • Never:从不加密ViewState

如果你设置ViewStateEncryptionMode="Always" 为这种方式,并且尝试解密ViewState数据,你将会得到如下的信息:

我们也可以在web.config文件中设置EnableViewStateMAC  ViewStateEncryptionMode这样的属性,使其可用。

提示如果不是必须的,应尽量避免ViewState加密,以免引起性能上的问题。如果你对ViewState比较陌生,请阅读我另外一篇关于ViewState的文章。Beginner's Guide to View State.

 

注释:初次翻译国外技术人员的文章,望大家多多批评、指正,谢谢!


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
关于ASP.NET中站点地图sitemap的使用发布时间:2022-07-10
下一篇:
在asp.net中web.config配置错误页发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap