在提交时将隐藏字段附加到表单而不是在提交之前拥有它更好吗?
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。他们所要做的就是获得错误消息并获得重做工作的特权。
我不太关心在我的表单中保留一个隐藏的 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。他们所要做的就是获得错误消息并获得重做工作的特权。