如果我只在HttpGet上验证它是否安全?

war*_*990 4 c# security asp.net-mvc asp.net-mvc-5

控制器:

[HttpGet]
public ActionResult Edit(int id)
{
    var obj = _uow.User.Get(id);
    if (obj.Name != User.Identity.Name) //validate
    {
        return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
    }

    return View(obj);
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(UserViewModel model)
{
    var obj = Mapper.Map<UserViewModel, User>(model); //map between EF Entity and ViewModel

    _uow.User.Update(obj);
    _uow.Save();
    return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我的HttpGet方法检查当前用户是否是数据库中的同一用户.但我HttpPost不做任何检查.这是否足够安全,或者我应该在两种方法中验证?

攻击者可以在不进行GET的情况下进行POST吗?

谢谢

Cod*_*ter 8

攻击者可以在不进行GET的情况下进行POST吗?

当然是.HTTP是无状态的.任何知道该URI的POST的人都可以重新创建并更改它,而无需先执行GET.

当然,他们必须先进行GET才能获得防伪标记,但之后他们可以随心所欲地发布任意内容.

您还可能希望查看绑定特定属性及其授权.例如,如果您UserViewModel拥有一个IsAdmin您未检查的属性,则攻击者可以自行管理.

我应该在两种方法中验证吗?

所以,是的.