它是安全的,如果我只验证HttpGet
本文关键字:验证 HttpGet 如果 安全 | 更新日期: 2023-09-27 18:16:14
控制器:
[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");
}
您可以看到我的HttpGet
方法检查当前用户是否与数据库中的用户相同。但是我的HttpPost
不做任何校验。这是否足够安全,或者我应该在两种方法中验证?
攻击者是否有可能在不做GET的情况下POST ?
谢谢
攻击者是否有可能在不做GET的情况下POST ?
当然可以。HTTP没有状态。任何知道POST到那个URI是什么样子的人,都可以在不执行GET的情况下重新创建和修改它。
当然,他们必须首先执行GET操作以获得防伪造令牌,但之后他们可以发布任何他们想要的内容。
您可能还需要查看绑定特定属性及其授权。例如,如果您的UserViewModel
具有IsAdmin
属性,您不检查,那么攻击者可以使自己成为管理员。
我应该在两个方法中验证吗?
所以,是的。