只是想看看有没有人能进一步解释一下。
在支持第829743条 on microsoft.com中,他们说:
如果关闭视图状态MAC功能,然后将视图状态用于不进行HTML编码(例如标签控件)的控件,攻击者可以篡改视图状态数据并将任意数据置于视图状态。此任意数据被解码,然后由控件在呈现已发布的页面时使用。因此,攻击者可以将脚本注入应用程序,除非您致力于防止攻击。例如,攻击者可以对数据进行解码,将脚本注入标签控件所在的数据中,然后从网站链接到该数据。任何点击链接的人都将成为脚本注入攻击的受害者,这种攻击可能窃取他们的身份验证cookie或会话id。该脚本还允许攻击者更改使用视图状态和应用程序特定攻击的控件的状态数据。
这对我来说毫无意义。为什么标签控件或任何其他从不更改且不使用http请求数据的静态控件都需要viewstate?我认为只有表单控件才会使用viewstate。我遗漏了什么吗?如果label控件使用viewstate,那么IMHO,这就搞砸了。如果有人能弄清楚的话我只是想澄清一下。也许还不够晚,或者我喝的啤酒还不够多。谢谢!
发布于 2013-06-01 02:06:45
为什么标签控件或任何其他从不更改且不使用http请求数据的静态控件都需要viewstate?
首先,viewstate拥有文字、标签和其他控件,并默认使用它,除非您使用EnableViewState="false"关闭该控件。
我可以考虑使用viewstate的一些原因是缓存/保存/保存相同的数据以供下一篇文章使用。例如:这段代码将在回发后将文本保留在文字中,而不会再次设置它。
<asp:Literal runat="server" EnableViewState="true" ID="txtLiterar">
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
txtLiterar.Text = "Time of start editing:" + DateTime.Now.ToString();
}
}回发后,控件将保留第一个init值。
默认情况下,为什么EnableViewState是开着的,那么,您可以将控件看作是变量,您可以将这些变量设置为代码后面的数据,并且需要在回发之后再次使用它。否则为什么要使用控件?将其直接键入到页面。
另一方面,如果您了解您所做的以及它们是如何工作的,您可以对其中的大多数用户关闭viewstate,并将它们重新设置回帖子。
在这个答案中,我写了更多关于视图状态和最需要的位置的信息:如何在没有控制问题的情况下禁用ViewState
现在让我们回到真正的问题,安全性.
如果关闭viewstate的验证,现在用于文本的文本也保存在viewstate上。
任何人都可以阅读并修改它(如果您还没有保护它),让我们说这会改变文本。
"Time of start editing",到"<script>alert("hello there");</script>",现在在第一次回发时,文字将呈现脚本,下面是警告您注意的问题。
https://stackoverflow.com/questions/16867989
复制相似问题