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".
当您托管多服务器时,这将是一个问题。因为机器钥匙不同。
\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