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

Tx3*_*x36 5 .net c# asp.net encryption viewstate

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

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

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

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

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

Lev*_*evi 18

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

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

  • 无所谓.EnableViewStateMac不仅仅保护ViewState,因此它应该*永远不会被设置为false.这条规定没有例外. (4认同)
  • 并且...... 10个月后@Levi刚刚在推特上宣布,即使你把它设置为假,它也会被忽略.像Levi说的那样,没有例外,现在如果你的代码依赖于此,它就会破坏.:) (2认同)

Dmi*_*lov 5

以防万一:

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

更多细节:ASP.NET 4.5.2和EnableViewStateMac


hal*_*lit 0

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

\n\n

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

\n\n

使用enableViewStateMac需要将连续的请求转发到同一服务器(即服务器亲和性)。此功能用于帮助防止篡改页面的视图状态;但是,它是基于当前服务器上自动生成的验证密钥来实现的。根据该密钥,生成消息身份验证代码 (MAC) 并将其在 ViewState 中发送回浏览器。问题是,如果执行 POST 返回并转到不同的服务器,您将收到一条不错的小错误消息,显示 \xe2\x80\x9cCorrupt View State\xe2\x80\x9c。

\n\n

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

\n\n

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

\n