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吗?
谢谢
攻击者可以在不进行GET的情况下进行POST吗?
当然是.HTTP是无状态的.任何知道该URI的POST的人都可以重新创建并更改它,而无需先执行GET.
当然,他们必须先进行GET才能获得防伪标记,但之后他们可以随心所欲地发布任意内容.
您还可能希望查看绑定特定属性及其授权.例如,如果您UserViewModel
拥有一个IsAdmin
您未检查的属性,则攻击者可以自行管理.
我应该在两种方法中验证吗?
所以,是的.
归档时间: |
|
查看次数: |
92 次 |
最近记录: |