gpt4 book ai didi

c# - 如何防止访问者篡改POST Action 中的id字段?

转载 作者:行者123 更新时间:2023-11-30 20:31:12 25 4
gpt4 key购买 nike

首先考虑由 ASP.NET Core MVC 脚手架生成的以下代码片段。

// GET: Students/Delete/5
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}

var student = await _context.Students
.SingleOrDefaultAsync(m => m.ID == id);

if (student == null)
{
return NotFound();
}

return View(student);
}

// POST: Students/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var student = await _context.Students.SingleOrDefaultAsync(m => m.ID == id);
_context.Students.Remove(student);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}

HttpGetHttpPost 的 Action 方法有一些区别如下:

  • id 在 Get 中可为空,但在 Post 中不可为空。
  • 如下初步检查仅在Get中。

代码:

    if (id == null)
{
return NotFound();
}

var student = await _context.Students
.SingleOrDefaultAsync(m => m.ID == id);

if (student == null)
{
return NotFound();
}

问题:

例如,访问者在 GET 中请求删除 id=5,但后来他在 POST 中篡改了 id,将其设置为一个数字,例如 id=6 或将其设置为无效值,例如 id=xodsfsdofsdfosdfsd。由于HttpPost中没有进行初步检查,如何防止这种情况?

最佳答案

您可能希望在 POST 操作中添加检查以验证用户,因为 you cannot prevent tampering with the value .

删除学生的用户可能有也可能没有删除学生的权限。这取决于您的应用程序来决定。这不是脚手架工具可以为您决定的事情。

[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var authorized = ValidateStudentDeletion(User, studentId: id);

if (authorized)
{
// delete student
...
return RedirectToAction("Index");
}
}

关于c# - 如何防止访问者篡改POST Action 中的id字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43564427/

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