6

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

问题之一ViewState是未加密。

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

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

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

4

4 回答 4

20

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

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

于 2013-01-08T07:28:18.947 回答
5

以防万一:

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

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

于 2014-05-08T10:01:14.747 回答
1

You might want to note that as of September 2014

All versions of the ASP.NET runtime 1.1 - 4.5.2 now forbid setting

<%@ Page EnableViewStateMac="false" %>

and

<pages enableViewStateMac="false" />

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

于 2014-09-12T10:52:27.850 回答
0

当您托管多台服务器时,这将是一个问题。因为机器密钥不同。

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

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

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

顺便说一句,文档说默认情况下这是关闭的。这是不正确的!去检查machine.config!

于 2012-12-27T10:28:54.923 回答