我目前正在修复ASP.net网站应用程序中的一些安全问题。
其中一个问题是ViewState
未加密。
所以我在StackOverFlow和其他地方检查了如何加密viewState,我使用<pages viewStateEncryptionMode="Always" />
并在Web.config中添加了像<machineKey validation="3DES" />
这样的3DES机器密钥。
我想知道"EnableViewStateMAC=true"
是否也是强制性的必要?,因为我在网上找到了一些建议的解决方案。
但是,在我的检查中,我发现即使没有这个加密也可以正常工作。
[注意:我必须在应用程序级别(Web.config)进行这些更改,因为对单个页面进行更改并不是此应用程序的实用解决方案。]
答案 0 :(得分:18)
即使启用了加密,也不要将EnableViewStateMac设置为false。 MAC保证客户端不会恶意篡改ViewState的内容。 (加密本身不足以保证这一点; MAC是必要的。)
EnableViewStateMac属性将在产品的未来版本中删除,因为没有正当理由将其设置为“false”。
答案 1 :(得分:5)
答案 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!