在提交时将隐藏字段附加到表单而不是在提交之前拥有它更好吗?

is it better to append hidden field to form on submit rather than to have it before submit?

我不太关心在我的表单中保留一个隐藏的 id 字段,因为用户可以通过 chrome 开发工具轻松更改值,或者只需复制代码、更改值并提交表单。

例如,我正在更新学生记录并且我有一个隐藏字段,例如:

<input type="hidden" id="student_id" value="1" />

如果我在通过 jquery 提交的表单上附加隐藏字段,如下所示:

$('<input />').attr('type', 'hidden')
      .attr('name', "student_id")
      .attr('value', '1')
      .appendTo('#edit_record_form');

$('#edit_record_form').submit();

虽然我应该在服务器端仔细检查。对于客户端,这是提高安全性的最佳方法吗?

想知道专业人士还推荐哪些其他方法?

非常感谢您。

although I should double check on the server side.

100% 正确。您在客户端所做的任何验证都只是用户的 QoL 功能。由于任何人都可以向您的服务器端点发出任何请求,因此从安全角度来看,对此表单预提交所做的任何 filtering/validation 都是毫无意义的。

(还要记住用户可以访问您的 javascript 并且可以拒绝 运行 或在他们的页面上修改其行为)

除此之外,我认为这种方法的优缺点是:

优点:

  • 用户不太可能把事情搞砸。
  • 自动提交机器人是 不太可能弄乱表格(这是好事还是坏事,如果它是 垃圾邮件机器人或您的机器人自动测试功能)
  • 您的界面工作方式的特征不太明显(即需要更高水平的技术技能来收集有关应用程序交互的知识)

缺点:

  • 您有更多代码需要编写和维护
  • 这里还有一个漏洞出现的机会
  • 非运行ning JS 的用户无法成功提交此表单
  • 也许用户 运行 的小众浏览器只是 稍微 不同地执行 JS,导致此表单无法使用
  • 有一天你想改变隐藏表单的工作方式,现在你必须改变服务器客户端验证

在我看来,弊大于利。只需确保您的服务器安全,不必担心好奇的用户修改他们的 DOM。他们所要做的就是获得错误消息并获得重做工作的特权。