誰說 ViewState 不能加密?

精贴 置顶
1029 0

經常有人質疑 ASP.NET 的 ViewState 儘量不要儲存一些安全性資料,當然這在網頁設計時必須儘量避免的,因為 ViewState 在儲存時『預設』只使用 Base-64 做加密,而 Base-64 其實只能防君子不能防小人,因為 Base-64 只經過簡單的演算法計算後,再使用 Base-64 的對照表對應出一定的編碼字串,因此,很容易被有心人所破解。

而 Base-64 其實在我們生活中其實是最常被使用的,也就是我們每天使用的 E-Mail 大部分就是使用這類的簡單加密,而因為 Base-64 不是那麼的安全,後來在 E-Mail 的加密處理上才會應用各式各樣的加密機制來解決一些機密的 E-Mail 的內容加密的問題,不過你會懷疑為什麼加密如此重要而我們何不儘量使用 Base-64 以外的加密技術呢?我想,這是需要以不同時機來做考量的,因為複雜的加密演算法相對的會消耗一些效能及網路傳輸量可能因此增多,所以是否要每個在網路傳輸 的資料都要經過加密的考量上,這都必須思考的問題,不然為了在 E-Mail 上與朋友問個新年快樂也要加密的話那勢必是太多此一舉了。

所 以,微軟在 ASP.NET 的 ViewState 預設也是利用 Base-64 來為一些表單等欄位個值做加密,原因當然就是不想讓『每個人』都可以輕易瀏覽 ViewState 的值,不過程式設計師也必須儘量避免在程式內寫個 ViewState("XXX")="AAA" 來暫存資料,除非是不重要的資料才可使用這種方法。不信的話你可以把你在 Page 的原始碼的 ViewState 拿到下列網址去看看就可知道到底有多不安全了,http://www.wilsondotnet.com/Demos/ViewState.aspx。

那 麼,難道 ASP.NET 的 ViewState 完全不能加密嗎?答案是否定的,因為你可別忘了.NET Framework提供了很多實作加解密的名稱空間讓我們使用,而且他也考量到舊版的 ASP 的不安全性,所以對 ASP.NET 做了很多架構上的調整,所以我們只需在 Web.Config 做簡單的設定即可完成加密動作,而在 ASP.NET 1.1 以前的版本只能做整個站台的 ViewState 做加密設定,無法針對特定的某些頁面才做加密,因此在 ASP.NET 2.0 的架構上也改善了這部分的不足,也就是程式設計師可以針對特定頁面的 ViewState 做加密設定了。

一、ASP.NET 1.1比前版本,請在 Web.Config 內做設定。
<configuration>
<system.web>
<machineKey validation="3DES" />
</system.web>
</configuration>

二、ASP.NET 2.0 。
1.在 Web.Config 做設定 -
<configuration>
<system.web>
<pages ViewStateEncryptionMode="Auto" />
</system.web>
</configuration>

ViewStateEncryptionMode有三種模式可設定,
a. Auto - 如果控制項呼叫 RegisterRequiresViewStateEncryption 方法要求加密,則 ViewState 資訊會加密。
b. Always - ViewState 資訊永遠加密。
c. Never - ViewState 永遠不加密,即使控制項要求加密。

2.在每個 Page 做設定 -
<%@Page ViewStateEncryptionMode="Always" %>

設定完後你就可以再把你的 ViewState 拿到 http://www.wilsondotnet.com/Demos/ViewState.aspx 測試看看,是否可以在被剖析出來了呢?

附註:什麼是控制項呼叫 RegisterRequiresViewStateEncryption 方法?
假設你在Pageload()內,使用 Page.RegisterRequiresViewStateEncryption()。

  • 没有任何评论
今日天气 ···

···

···

···

热门排行
CSS cursor鼠标样式一览表 2012-06-25
.NET后台写JS代码 2011-11-03
网站地址多出jdfwkey的问题解析及... 2010-08-25
数据库xxx的日志已满,请备份该数... 2013-07-19
百度、google、Yahoo网站地图制作... 2011-01-30
<a>标签的伪类书写顺序问题... 2010-09-04
什么是长尾关键词? 2010-09-24
CEO名言 2010-08-31
Mysql 主从数据库同步 2010-09-12
用ASP实现网页BBS 2010-11-01
博主推荐
本个人博客微信公众平台上线啦~~... 2013-10-13
饼哥网络互联上线啦~~要买域名空... 2013-09-20
网站title标题如何正确修改不会被... 2013-08-26
饼哥通讯录系统上线啦,欢迎大家... 2013-08-24
ASP .NET MYSQL 的简单分页 并不... 2013-08-19
网站有弹窗广告这样的站点,百度... 2013-08-17
做淘宝SEO优化需要注意的8大问题 2013-08-17
淘宝网怎么做SEO优化 2013-08-17
站长们要学习的“苍井空精神” 2013-08-17
苹果公司今日发布了iOS 7第五个开... 2013-08-07
随便看看
.net用母版页和内容页实现动态Ti... 2013-08-22
用C#实现查询Google收录量 2010-09-01
ASP基础教程:堵住ASP漏洞 2010-10-22
js输入框字数限制 2013-06-21
XP不能装USB 2.0驱动问题解决 2010-10-15
开始→运行→输入的命令集锦 2010-08-31
一个ASP统计制作实例 2010-11-02
兼容FF 加入收藏夹和设为首页JS 2010-09-02
.NET弹出对话框以及页面跳转总结 2011-11-03
Java基础:创建成员内部类的注意... 2013-06-26
RSS新闻
传媒新闻
CSDN
八卦新闻
女性新闻
台湾新闻
互联网
军事-新浪博客
IT-新浪博客
汽车新闻
游戏新闻
国际新闻
国内新闻
体育新闻
我的微博
北京 上海 杭州 深圳 广州 成都