是否最好在提交时将隐藏字段附加到表单而不是在提交之前将其添加?

时间:2018-04-17 15:40:34

标签: php html forms hidden

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

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

<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();

虽然我应该仔细检查服务器端。对于客户端来说,这是我可以采用哪种方法来提高安全性?

想知道专业人士会提出哪些其他方法?

非常感谢你。

1 个答案:

答案 0 :(得分:1)

  

虽然我应该仔细检查服务器端。

100%正确。您在客户端进行的任何验证都只是用户的QoL功能。由于任何人都可以向您的服务器端点生成任何请求,因此从安全角度来看,对此表单预先提交进行的任何过滤/验证都是没有意义的。

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

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

<强>优点:

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

<强>缺点:

  • 您有更多代码可以编写和维护
  • 还有一个机会让虫子溜到这里
  • 未运行JS的用户无法成功提交此表单
  • 也许用户运行一个利基浏览器,只是略微执行JS,导致此表单无法使用
  • 有一天,您想要更改隐藏表单的工作方式,现在您必须更改服务器客户端验证

在我看来,利弊远远不值得专业人士。只需使您的服务器安全,不要担心好奇的用户修改他们的DOM。他们所做的就是获取错误信息并获得重做工作的特权。