none
viewstate的安全性的疑问 RRS feed

  • 问题

  • 我们知道viewstate只是通过简单的base64编码转换就直接写入了前端页面。请问将一个实体类存入viewstate中。

    如:

    Model.Privilege oPrivilege = new Model.Privilege();
    oPrivilege.ID = 1;
    ViewState.Add("Privilege", oPrivilege);
    

    不加密viewstate的情况下安全吗?

    • 已编辑 半夜喝茶 2010年4月7日 8:06 代码看起来不对劲
    2010年4月7日 8:04

答案

  • 肯定不安全。ViewState 会直接以 Base64 的形式从 Response 回来的 HTML 中看到,就在 <form> 中的 <input> 里面有一个 __VIEWSTATE 的东西。

    不过因为这一串东西是由 Web 服务器返回的,即使被人解码了其实也没什么损失,所以,一般,敏感的数据,特别是用户信息和权限,还是别放在 ViewState 里面,换句话,ViewState 根本不是给你干这个事情的,它是用来保存控件状态的。可以考虑写 Session,或 Catche 等。


    Mark Zhou
    2010年4月7日 8:11

全部回复

  • 肯定不安全。ViewState 会直接以 Base64 的形式从 Response 回来的 HTML 中看到,就在 <form> 中的 <input> 里面有一个 __VIEWSTATE 的东西。

    不过因为这一串东西是由 Web 服务器返回的,即使被人解码了其实也没什么损失,所以,一般,敏感的数据,特别是用户信息和权限,还是别放在 ViewState 里面,换句话,ViewState 根本不是给你干这个事情的,它是用来保存控件状态的。可以考虑写 Session,或 Catche 等。


    Mark Zhou
    2010年4月7日 8:11
  • 你好,

    ViewState 的内容只是一种编码,并不是用来加密的,所以如果你要保持数据在ViewState中,并且是机密的话,先用算法加密一下再保存。

    谢谢!

    2010年4月7日 8:25
    版主