Asp.net EnableViewStateMac=“false”为什么它甚至是一个选项?

Asp.net EnableViewStateMac=“false”为什么它甚至是一个选项?,asp.net,viewstate,Asp.net,Viewstate,在阅读了很多关于EnableViewStateMac以及它在未来的.NET框架中被删除的可能性之后,我仍然想知道为什么这是一个设置为false的选项 我知道你永远不应该将其设置为false,但谁决定创建该选项?如果有人真的考虑过,为什么要把它设为假的呢 为什么您可以选择启用不安全性?最初在asp期间,HTML页面通常被发布到asp页面,这是完全不同的。这种类似的编码方法现在称为跨页过账。ViewState是特定于某个页面的,因此如果尝试将asp.net页面发布到另一个asp.net页面,则Vie

在阅读了很多关于EnableViewStateMac以及它在未来的.NET框架中被删除的可能性之后,我仍然想知道为什么这是一个设置为false的选项

我知道你永远不应该将其设置为false,但谁决定创建该选项?如果有人真的考虑过,为什么要把它设为假的呢


为什么您可以选择启用不安全性?

最初在asp期间,HTML页面通常被发布到asp页面,这是完全不同的。这种类似的编码方法现在称为跨页过账。ViewState是特定于某个页面的,因此如果尝试将asp.net页面发布到另一个asp.net页面,则ViewState会有所不同。现在,在这种情况下,如果您启用了ViewStateMac,这意味着您希望验证viewstate集的完整性,那么验证将失败并导致错误。因此,人们会禁用viewstatemac,这样他们就可以继续以旧的方式编程,而Microsoft继续提供此功能以支持遗留代码


但是,正如您已经提到的,这是一个巨大的安全风险,打开应用程序会受到各种攻击。

最初在asp时代,HTML页面通常会发布到asp页面,这是完全不同的。这种类似的编码方法现在称为跨页过账。ViewState是特定于某个页面的,因此如果尝试将asp.net页面发布到另一个asp.net页面,则ViewState会有所不同。现在,在这种情况下,如果您启用了ViewStateMac,这意味着您希望验证viewstate集的完整性,那么验证将失败并导致错误。因此,人们会禁用viewstatemac,这样他们就可以继续以旧的方式编程,而Microsoft继续提供此功能以支持遗留代码


但是,正如您已经提到的,这是一个巨大的安全风险,打开应用程序会遭受各种攻击。

这个开关是在我加入ASP.NET团队之前很久创建的,但我自己对此很好奇,并花了一些时间探索旧的bug数据库。据我所知,它的推出有两个主要原因

该开关被视为可能提供性能优势。在.NETFramework1.0Alpha的早期预览中,MAC的计算速度确实很慢。这是在1.0达到RTM之前修复的,因此性能差异可以忽略不计。然而,损害已经造成了:这是早期开发人员心中埋下的种子:在某些情况下,为了性能起见,可能需要禁用MAC。这也导致了一系列MSDN文章,其中建议禁用MAC可以提高性能,而我还在2014年!查找和删除这些物品

在web场环境中,需要同步。不幸的是,我们不容易安全地生成机器密钥。因此,在ASP.NET测试的早期,这种切换允许测试人员为服务器场部署做简单的事情,而不是为服务器场部署做正确的事情。我们今天仍然在与之斗争:大多数开发人员使用在线机器密钥生成器,这是不安全的。我正在与VisualStudio团队合作,以使生成和保护机器密钥更容易

当时,人们认为,如果MAC被禁用,可能发生的最糟糕的事情就是你可以对站点进行XSS。结果证明这是一个错误的评估


最后,它的消除不再仅仅是一种可能性。它已经在我们的本地源代码存储库中删除。下一次.NET Framework更新,我们在世界上爆炸将有这个有效载荷,但我没有时间表,何时可能。我们只是坐在板机上等待着开始

这个开关是在我加入ASP.NET团队之前很久创建的,但我自己对此很好奇,并花了一些时间探索旧的bug数据库。据我所知,它的推出有两个主要原因

该开关被视为可能提供性能优势。在.NETFramework1.0Alpha的早期预览中,MAC的计算速度确实很慢。这是在1.0达到RTM之前修复的,因此性能差异可以忽略不计。然而,损害已经造成了:这是早期开发人员心中埋下的种子:在某些情况下,为了性能起见,可能需要禁用MAC。这也导致了一系列MSDN文章,其中建议禁用MAC可以提高性能,而我还在2014年!查找和删除这些物品

在web场环境中,需要同步。不幸的是,我们不容易安全地生成机器密钥。因此,在ASP.NET测试的早期,这种切换允许测试人员为服务器场部署做简单的事情,而不是为服务器场部署做正确的事情。我们今天还在和这个战斗,t oo:大多数开发人员使用在线机器密钥生成器,这是不安全的。我正在与VisualStudio团队合作,以使生成和保护机器密钥更容易

当时,人们认为,如果MAC被禁用,可能发生的最糟糕的事情就是你可以对站点进行XSS。结果证明这是一个错误的评估


最后,它的消除不再仅仅是一种可能性。它已经在我们的本地源代码存储库中删除。下一次.NET Framework更新,我们在世界上爆炸将有这个有效载荷,但我没有时间表,何时可能。我们只是坐在板机上等待着开始

这可能是微软需要有人回答的问题。虽然我同意@LasseV.Karlsen的说法,只有微软的人才能正确回答这个问题,但我必须提醒你,即使是微软的开发人员也会犯错误。我相信最初的设计师认为允许这个值为假并不是什么大问题。当然,现在我们知道这是一个大问题。这可能是一个需要Microsoft人员回答的问题。虽然我同意@LasseV.Karlsen的说法,即只有Microsoft人员才能正确回答,但我必须提醒您,即使是Microsoft的开发人员也会犯错误。我相信最初的设计师认为允许这个值为假并不是什么大问题。当然,现在我们知道这是一个大问题。听起来很有趣,回答很好,李维!直到.NET 1.0默认的EnableViewStateMac为False!声明说,如果将其设置为false,则可以执行任意代码。我很好奇这不是一个需要修复的大错误,也不是仅仅通过让选项什么都不做。听起来很有趣,回答很好,Levi!直到.NET 1.0默认的EnableViewStateMac为False!声明说,如果将其设置为false,则可以执行任意代码。我很好奇这是一个怎样的问题,也很好奇这不是一个需要修复的大错误,而不仅仅是让选项什么都不做。