我最近继承了一个 ASP.NET MVC 4 代码库。我注意到的一个问题是在 url 以及 html 表单提交中使用了一些数据库 ID(整数)。当前状态的代码可通过 URL 修补和创建具有不同数字的自定义 HTML 帖子来利用。
现在,虽然我可以通过使用会话状态或其他身份验证检查轻松解决 URL 问题,但我不太确定嵌入到站点吐出的 HTML 中的数据库 ID(即我给他们一个下拉列表来填充)。当 ID 在帖子中返回时,我如何确定我将它们作为有效选项放在那里?就解决这个问题而言,什么被认为是“最佳实践”?
虽然我很感激我可以“引导它”,但我很犹豫这样做,因为我发现在调试数据库时使用它们很痛苦。
我在这里有选择吗?我必须 GUID 以防止轻易猜测 id,还是有某种 DRY 机制可以用来在 id 返回站点时验证它们的使用?
更新:一位评论者询问了我期待的漏洞。假设我吐出了一个 HTML 表单,其中包含一个可以从中导入“宝藏”的所有位置的下拉列表。用户拥有的位置的 id 是 1,2 和 3,这些在 HTML 中提供。但是用户检查了 html,对其进行了修改,并决定将一个 POST 与 4 选择的 id 放在一起。4 不是他的位置,是别人的。