ASP.Net网站中的ViewStateEncryption是否必须启用EnableViewStateMAC = true?

时间:2012-12-27 09:21:27

标签: c# asp.net .net encryption viewstate

我目前正在修复ASP.net网站应用程序中的一些安全问题。

其中一个问题是ViewState未加密。

所以我在StackOverFlow和其他地方检查了如何加密viewState,我使用<pages viewStateEncryptionMode="Always" />并在Web.config中添加了像<machineKey validation="3DES" />这样的3DES机器密钥。

我想知道"EnableViewStateMAC=true"是否也是强制性的必要?,因为我在网上找到了一些建议的解决方案。 但是,在我的检查中,我发现即使没有这个加密也可以正常工作。

[注意:我必须在应用程序级别(Web.config)进行这些更改,因为对单个页面进行更改并不是此应用程序的实用解决方案。]

4 个答案:

答案 0 :(得分:18)

即使启用了加密,也不要将EnableViewStateMac设置为false。 MAC保证客户端不会恶意篡改ViewState的内容。 (加密本身不足以保证这一点; MAC是必要的。)

EnableViewStateMac属性将在产品的未来版本中删除,因为没有正当理由将其设置为“false”。

答案 1 :(得分:5)

以防万一:

  

从ASP.NET 4.5.2开始,运行时强制执行EnableViewStateMac = true

更多详细信息:ASP.NET 4.5.2 and EnableViewStateMac

答案 2 :(得分:1)

您可能需要注意截至2014年9月

所有版本的ASP.NET运行时1.1 - 4.5.2现在都禁止设置

  

&lt;%@ Page EnableViewStateMac =“false”%&gt;

  

&lt; pages enableViewStateMac =“false”/&gt;

http://blogs.msdn.com/b/webdev/archive/2014/09/09/farewell-enableviewstatemac.aspx

答案 3 :(得分:0)

托管多服务器时会出现问题。因为机器密钥不同。

如果您的项目在单台机器上运行。 EnableViewStateMAC = true是安全的。

使用enableViewStateMac要求将连续请求转发到同一服务器(即服务器关联)。此功能用于帮助防止篡改页面的视图状态;但是,它基于当前服务器上的自动生成的验证密钥。从该密钥生成消息认证码(MAC)并在ViewState中发送回浏览器。问题是,如果执行POST后退并转到另一台服务器,您将收到一条错误的错误消息“腐败视图状态”。

要解决此问题,您可以在元素中将enableViewStateMac设置为false,也可以在所有服务器(在服务器场中)中为该元素中的validationKey属性指定公共值。

顺便说一下,文档说默认为OFF。那不对!去检查machine.config!