我刚刚阅读了一些关于Web窗体安全性的文章,以及为什么不应该只在第一页加载时进行安全检查,因为它可以欺骗回发并绕过这个检查:
if (!IsPostBack)
{
if (IsUserInRole("SomeRole"))
{
// do something
}
}
那么我想,如果标记默认隐藏某些东西,并且安全检查只是启用它,那么它仍然是真的吗?
标记:
<asp:Button ID="btnUpdate" runat="server" Text="Update" Visible="false" />
代码隐藏:
if (!IsPostBack)
{
if (IsUserInRole("SomeRole"))
{
btnUpdate.Visible = true;
}
}
认为在第一页加载时,如果有人有权查看更新按钮,他们可以,并且可见性状态将保存在ViewState中以用于后续回发,这使得每次检查都是多余的。即使有人设法欺骗回发,他们仍然无法看到更新按钮,所以他们什么也得不到。
所以问题是:有人不仅可以欺骗回发,还能成功修改ViewState,以便他们可以看到他们不应该能够做到的事情吗?如果是,似乎我们必须更改上面的代码隐藏,以便不使用IsPostBack检查并处理这两种情况,无论标记中的默认值是什么:
if (IsUserInRole("SomeRole"))
{
btnUpdate.Visible = true;
}
else
{
btnUpdate.Visible = false;
}
但这似乎有点矫枉过正。虽然可以肯定的是,如果你把它重写为:
,它似乎并不那么糟糕btnUpdate.Visible = IsUserInRole("SomeRole");
所以,这真的有必要吗?
答案 0 :(得分:0)
我不确定你的应用程序是做什么的,但从这个应用程序的初始声音中,需要采取更多的安全措施。
OWASP有一个很好的.Net Security Cheat Sheet
如果您正在查看可以在页面上执行的不同操作,例如@EdSF表示并在事件开始时执行重新验证检查。
在Web表单中实现的另一个简单方法是检查跨站点请求伪造(CSRF)。我有一个演示,我在webforms页面上成功地执行了CSRF,该页面启用了视图状态MAC并且还加密了视图状态。
要获取有关各种漏洞和预防措施的更多信息,请查看OWASP 2013 Top 10