ASP.NET核心标识注册XSRF/CSRF保护



我正在用Razor页面学习asp.net核心3.1。在观看有关身份/身份验证/授权的教程时,用户创建/注册表单的一个常见示例方法是将一些IsAdmin复选框或用户角色选择下拉框包装在@if(User.IsInRole(...))块中,以便稍后在帖子处理程序中进行绑定和检查。这使得普通用户可以注册为访客/客户等,而管理员可以创建其他管理员角色。

所以我很自然地想到了潜在的XSRF/CSRF攻击,有人可以用这些复选框/下拉框伪造一个表单来创建这些角色。

我了解到asp.net Razor页面在所有POST表单上都启用了内置的防目标标记。我的问题是,这足以抵御这种攻击吗?

我想我可以在页面模型代码后处理程序中进行二次检查,再次检查当前登录的用户,如下所示:

if (Input.Role == MyRole.Admin && User.IsInRole(MyRole.Admin))
{
//Create admin user
}

这会为创建特权角色提供更多保护吗?或者它是多余的?如果仍然不够,还应该考虑其他方法吗?

我认为检查用户角色以获得额外的安全性没有问题,但你应该做的是将你的操作分开,即一个操作必须只有一个目的,然后根据每个操作需要的访问级别,你可以用Authorize属性来装饰它,如下所示:

[Authorize(Roles = "Administrator, PowerUser")]
public class ControlPanelController : Controller
{
public ActionResult Stuff()
{
}
[Authorize(Roles = "Administrator")]
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult DoAdminStuff()
{
}
}

请参阅此处MS Docs

最新更新