gpt4 book ai didi

c# - 如果我只在 HttpGet 上验证是否安全?

转载 作者:太空狗 更新时间:2023-10-30 00:30:49 25 4
gpt4 key购买 nike

Controller :

[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?

谢谢

最佳答案

Is it possible for attacker to POST without doing GET?

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

当然,他们必须先执行 GET 以获得防伪 token ,但之后他们可以发布他们想要的任何内容。

您可能还想查看绑定(bind)特定属性及其授权。例如,如果您的 UserViewModel 有一个 IsAdmin 属性,而您没有检查它,那么攻击者就可以让自己成为管理员。

should I validate in both method?

所以,是的。

关于c# - 如果我只在 HttpGet 上验证是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32946224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com