zoukankan      html  css  js  c++  java
  • (译)如何在ASP.NET中安全使用ViewState

    原文: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.

     

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

  • 相关阅读:
    apache一个IP多个站点的配置方法
    论文笔记之:Deep Reinforcement Learning with Double Q-learning
    论文笔记之:Playing Atari with Deep Reinforcement Learning
    论文笔记之:Learning Multi-Domain Convolutional Neural Networks for Visual Tracking
    论文笔记之:Learning to Track: Online Multi-Object Tracking by Decision Making
    论文笔记之:Human-level control through deep reinforcement learning
    (译) 强化学习 第一部分:Q-Learning 以及相关探索
    论文笔记之:Multiple Object Recognition With Visual Attention
    论文笔记之:Attention For Fine-Grained Categorization
    新手教程之:循环网络和LSTM指南 (A Beginner’s Guide to Recurrent Networks and LSTMs)
  • 原文地址:https://www.cnblogs.com/zhaox583132460/p/3413629.html
Copyright © 2011-2022 走看看