根据我的先前的问题,关于ASP.net默认的Page.IsPostBack实现是否安全(不安全;它可以被伪造...甚至HTTP谓词不一定是POST!),我在想;肯定有更好的方法来实现它吧?我们能否想出一个Page.IsPostBack实现方式,使其为真时几乎保证指示页是一个实际的ASP.net回发?这对于只想做一次安全检查(例如基于用户角色确定某些内容是否会出现),并且只想在我们处理非ASP.net回发时才这样做非常重要。
我首先想到的如何实现这个功能的想法是在属性中实现检查代码,这样我就可以在Page_Load
中写类似于这样的东西:
if (!_isPostBack)
{
// Do security check
if (userIsNotAuthorized)
{
btnViewReports.Visible = false;
btnEditDetails.Visible = false;
// etc.
}
}
有没有一种安全的方式来实现_isPostBack
?也许在ViewState中存储某些东西,这将很难或不可能被篡改以模拟PostBack?一个随机字符串?