我有一个asp.net webforms项目。在那里,“管理员”能够进入屏幕以提交将创建新用户的表单(CreateUser.aspx)。
如果稍后将该用户的权限更改为小于Admin,则他们将无法再访问该屏幕以创建新用户。但是,如果他们保存了确切的Web请求,以便在他们是管理员时创建新用户,他们可以重播此用户并仍然创建新用户。
随机人员不可能提交此表单,除非他们猜测活动会话ID(这是每个表单提交时唯一检查的内容)。
CreateUser是管理功能的众多示例之一。是否有适当的解决方案来验证用户是否是这些不同表单提交的管理员(不确定在asp.net中执行此操作的干净方法)?或者在注销时使会话到期并且永远不会重用会话ID是可以接受的吗? asp.net是否具有内置的任何其他安全功能来防范此类攻击?
答案 0 :(得分:1)
一种方法是拥有一个基类(其中inturn继承了类 - “page”),所有的aspx页面都应该继承这个基类。因此,无论何时加载aspx页面,都会调用基本的pageLoad方法。在此方法中,您可以检查身份验证和授权。
public class BasePage : System.Web.UI.Page
{
public BasePage()
{
this.Load += new EventHandler(BasePage_Load);
}
void BasePage_Load(object sender, EventArgs e)
{
//Check authentication/authorized
//if authenticated/authorized leave it.. If not redirect to error page
}
}
public partial class Forms_CreateUser : BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
public partial class Forms_CreateRole : BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
答案 1 :(得分:0)
用户web.config的授权设置,以限制对管理员角色中的用户访问CreateUser.aspx:http://support.microsoft.com/kb/316871(属性名称为roles
而不是users
)。