在ASP.NET中加密页面机制

本节介绍ASP.NET对视图信息的加密功能。Page.RegisterRequiresViewStateEncryption方法就是将控件注册为需要视图状态加密的控件。如果您要开发用于处理潜在的敏感信息的自定义控件,请调用RegisterRequiresViewStateEncryption方法向页注册控件,并确保该控件的视图状态信息已加密。
RegisterRequiresViewStateEncryption方法必须在页生命周期的PreRender阶段中或该阶段之前调用,下面在前面ViewStateControl控件中重写OnPreRender方法并加入视图加密功能,增加后的代码段如下:
protected override void OnPreRender(EventArgs e)
{
    this.Page.RegisterRequiresViewStateEncryption();
    base.OnPreRender(e);
}
编译控件并在浏览器中重新运行,可以看到发送到客户端的隐藏域视图控件中的值由:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value= "/wEPDwULLTE3NjU0NjM4OTEPZBYCAgMPZBYEAgEPDw8WAh4OVGV4dF9WaWV3U3RhdGUFIuaIkeaYr+eUqFZpZXdTdGF0ZeWuueWZqOWtmOWCqOeahCFkFCsAAhYEHglCYWNrQ29sb3IKAB4EXyFTQgIIZ2QCBw8PFgIeBFRleHQF9QN0aGlzLlZpZXdTdGF0ZUNvbnRyb2wxLlRleHRfTm9WaWV3U3RhdGXlsZ7mgKcg5rKh5pyJ5L+d5a2Y6KeG5Zu+54q25oCBIDxJbWcgc3JjPSdJbWFnZXNcSlMuanBnJyAvPiAgPGJyPjxicj50aGlzLlZpZXdTdGF0ZUNvbnRyb2wxLlRleHRfVmlld1N0YXRl5bGe5oCnIOW3sue7j+S/neWtmOS6huinhuWbvueKtuaAgSA8SW1nIHNyYz0nSW1hZ2VzXFhMLmpwZycgLz4gIDxicj48YnI+dGhpcy5WaWV3U3RhdGVDb250cm9sMS5GYWNlU3R5bGXlsZ7mgKcuT0sg5bey57uP5L+d5a2Y5LqG6KeG5Zu+54q25oCBIDxJbWcgc3JjPSdJbWFnZXNcWEwuanBnJyAvPiAgPGJyPjxicj50aGlzLlZpZXdTdGF0ZUNvbnRyb2wxLkZhY2VTdHlsZS5CYWNrQ29sb3Ig5bey57uP5L+d5a2Y5LqG6KeG5Zu+54q25oCBLCDnnqfvvIzmiJHnmoTpopzoibLlsLHmmK/kv53lrZjnmoTpopzoibIgPEltZyBzcmM9J0ltYWdlc1xYTC5qcGcnIC8+ICA8SW1nIHNyYz0nSW1hZ2VzXEJHLmpwZycgLz4gPGJyPjxicj5kZGTFH8U37EhQNJzHTltcDxNaH2mMfQ==" />
变成了已经加密的散列码:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value= "J62G77yDi1rdf8+ZXszW1d3eAPnuzO8h2MCNPEN2HR6daQNjLLamfq4EHwWRRJ16S6kHFp43gwVPkMB9RPQtMaI5Gc+lZ9orQjsZWpvaVDTBI4fF6wFRj7qY1r2hREghEQYM/e1a+JX9oiWk1kUs8vFJ3SNeXCkCdDb7fQtr6DlCKsbCGGWDrawgiIsI0O5pnYMPloa+z74clY6/DYZ23BIAZNNYDLML/e7mVIzSS+V4FBZsXxBBdRx1oWJ60wjrfkScl1g0Dpbn+LZ2NIu7nh2t5Xu8iTW1NmjSfUoH9ymBmQkCNek3jaex18n9wBOdLGsQ8ZxO/hAGVqbcqTQStiuRYezjvm8T9Q0U9cj9SI+FnS2PktVHXqh6qLsjH1Dlwm+qFyjHK2fvbH+WA2NZUq3HzObR4GzNFRlZn8ZliO/FDJEKyH+x9X7qneaJs9dTg6mo/qbvI+S0W1viQ/nj/OrC3PoiLwvwyd1WjBlND4B21rVjnoq/J+jPNQGE+AdQR2fW3kYAtGhKf6PSVmUm9fZ26JY2rkYw2vBahPWmxHqnf9V5yt/0D3LP9Mx7KYay4PAItTeEzIT4G5I0Hp65a8d/QQJbQTCs1Qz798Mei66mqF8QrOBxR2EUsS+uCekxQe+2xDhX2kkxntoqxgRJ4/n8cdKr2Z+K3F3IEmxObo+QvQ5wUtMWrsKIY8Jad562zCNBGjlyU72i+KuORHQCBoXRgt5vPeIBpdjb0Vk3tb6t7g2T5yFyB7PBTqEwV43Ws4/BPxYsdr9YCNOJd/TB6cDI5FUS/dGYTej2EZt2HOPCM758WeEwBQZuG+t1dFEZU6+vicImHDV8ifCwNv+Yhw==" />
</div>
还可以指定视图状态信息的加密模式,通过系统枚举ViewStateEncryptionMode来设置,该枚举可以控制是否加密视图状态信息,它有三个枚举项。
枚举成员    说    明
Auto    如果控件通过调用RegisterRequiresViewStateEncryption方法请求加密,则加密视图状态信息;否则不加密。此值是Page.ViewStateEncryptionMode属性的默认值
Always    强制加密视图状态信息,而不管有没有调用
Never    即使控件请求加密,也不加密视图状态信息
以上枚举项除了在控件中设置外,还可以在配置文件配置应用程序级别,或者在Page页面中配置成页面级别。在控件或页面中应用时仅作如下设置:
this.Page.ViewStateEncryptionMode = ViewStateEncryptionMode.Auto;
this.Page.RegisterRequiresViewStateEncryption();
经过如上设置后,页框架会自动完成加密与解密功能。对该功能再补充两点:
(1)加密视图状态肯定会影响到应用程序的性能,所以使用时要谨慎。
(2)只要页面中有任何一个控件要求对视图状态进行加密,那么页面中所有的视图状态也都将被加密。目前ASP.NET还没有实现针页面中某个控件视图加密功能(在调用时不管是在控件中还是在页面中都是调用页面控件Page的方法RegisterRequiresViewStateEncryption,且该方法没有任何可重载方法)。

在ASP.NET中加密页面机制相关推荐

  1. ASP.NET 中处理页面“回退”的方法

    我们在编写基于 ASP.NET 的应用程序时,如果代码执行出错或检测到异常,一般会提示用户"返回"或"回退",或者在多步操作.列表/详细的查看界面中,也会给用户 ...

  2. ASP.net 中的页面继承实现和通用页面的工厂模式的实现

    最近用.Net做web项目的时候遇到了一些问题,就是很多的页面的处理一样的,不一样的就是我们写的存储过程不同,为了考虑代码的重复利用和可维护性和可 扩展性,于是写了一个对于单据页面的工厂模式,采用界面 ...

  3. ASP.NET中实现页面间的参数传递 QueryString\Application\Session\Cookie

    一.使用QueryString 使用QueryString在页面间传递值是一种非常常见的方法,我们在ASP中就常常用到. (1)优点和缺点     优点:     1.使用简单,对于安全性要求不高时传 ...

  4. asp.net 调用html页面,ASP.NET中HTML页面的访问验证设置方法

    可能有很多朋友和我一样不会留意到这样的问题,在ASP.NET中,使用其自身提供的访问验证功能(表单验证.Passport 验证.Windows 验证),并不会对静态文件(如 html.图像文件.文本文 ...

  5. ASP.NET中的页面指示标识

    页面指示标识 的功能是用来确定在处理aspx文件的时候,需要系统做一些什么特殊的设定?它的语法是: <%@ directive attribute=value %>   比如:<%i ...

  6. ASP.NET中防止页面多次加载的IsPostBack属性

    查查msdn,上边有IsPostBack的定义:获取一个值,该值指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问.如果是为响应客户端回发而加载该页,则为true:否则为 false. ...

  7. ASP.NET中aspx页面runat=server的本质(Essensial of runat=”server” in ASP.NET)

    今天同事问我一个"神奇"的问题,另一个同事"神奇"地找出了问题但无法解释,归咎于一种"习惯"或者"下次注意".现在我把问 ...

  8. Asp.net中一个页面多个表单的解决方案

    <form id="form1" runat="server"> <input name="TrueName" type= ...

  9. [总结]Asp.net中的页面乱码的问题

    1.<globalization             requestEncoding="gb2312"             responseEncoding=&quo ...

  10. ASP.Net中页面传值的几种方式

    大致概括一下,ASP.NET 页面之间传递值得方式大致可以分为如下几种:Request.QueryString["name"],Request.Form("name&qu ...

最新文章

  1. 记录 常用 功能 C
  2. ubuntu-18.04 root登录图形界面失败问题解决方案
  3. [cocoapods]安装cocoapods
  4. java 微信申请退款的开发
  5. java日志系统_Java日志系统
  6. 神经网络入门学习-一些基本的概念+不含隐层
  7. Oracle 数据库连接工具
  8. 计算机毕业设计php的仓库管理系统(源码+系统+mysql数据库+Lw文档)
  9. Bandicam(班迪录屏)破解注册机
  10. 用matlab产生chu序列和frank序列
  11. 【品牌专场】跨越 X 突破,音视频聚力新机遇
  12. 设计模式C++——命令模式(高屋建瓴)
  13. 设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符
  14. IBM 发布全球首个 2nm 芯片制造技术
  15. 我们、这样子相爱、什么都不计较,多好啊~
  16. F2812 Flash烧写总结
  17. unity 启动选择分辨率_Unity发布exe去窗口设置分辨率
  18. 最新Rhino 犀牛 7 for Mac(三维建模软件)7.21.22208
  19. 人工智能助力古彝文识别,推动传统文化传承
  20. 淘宝如何解决超卖问题

热门文章

  1. 【XLL 框架库函数】 TempInt/TempInt12
  2. Android的ALSA声卡
  3. 什么样的公司卖什么货!
  4. JS判断用户手机是IOS还是Android
  5. JSTL核心标签库详解
  6. MySQL WARN: Establishing SSL connection ...... is not recommended.
  7. python scipy stats学习笔记
  8. springboot在eclipse实现热部署
  9. 走进JavaScript
  10. ECharts(Enterprise Charts 商业产品图表库)初识