【问题标题】:Read only textfield editable via inserted javascript?只读文本字段可通过插入的 javascript 编辑?
【发布时间】:2012-04-26 13:51:18
【问题描述】:

我有一个带有只读字段的表单,用于显示/提交到下一页。

但是,我注意到在 Chrome 中使用开发人员工具时,我能够向元素添加 id,使用 javascript 控制台选择该元素并更改其值。我提交了表单,你知道什么 - 下一页对其进行操作,就好像它是原始值一样。

现在,使用我正在构建的网站的人应该没有任何问题,但对我来说这似乎是一个巨大的安全漏洞。只读的目的不是保持不变吗?如果一个精明的用户改变它,那不是一个大问题吗?事实上,我什至不认为你可以在 chrome 中添加和更改属性。

请在下面发表您的想法,如果有解决方案,请告诉我(“禁用”文本字段,但设置禁用属性不会将数据发送到下一页)。

【问题讨论】:

  • 这就是我们必须清理用户输入的原因。如果您不想让他们编辑,请不要将其放在表单上。
  • 您可以在 Chrome、Firefox 甚至 IE 中执行此操作...
  • 如果您有一个可以发布内容的 URL,您必须在服务器上编写代码以期望真正发布 anything。用户可以完全控制浏览器以及发布到您网站的内容。网络上总是如此——这只是系统的本质。
  • 没有办法阻止用户使用 javascript 来更改输入。 Readonly 只是禁用正常用户输入的浏览器提示。
  • 重点不在于哪些浏览器可以做到;我非常了解其他浏览器中的开发人员工具。它甚至也不是关于清理的——除非你的意思是检查文本字段是否是原始值(并且存储变量的唯一安全方法是使用会话?!!?)

标签: javascript html forms google-chrome readonly


【解决方案1】:

从不信任来自网络表单的输入。

用户可以很容易地删除readonly 属性并编辑值。 readonly 属性只是在填写表单时帮助用户的东西,所以他们不会编辑期望它改变的值,而你的服务器实际上不会让它改变。因此,请始终记住首先在您的服务器上对行为进行编码,并让 HTML 表单成为用户的有用指南,以使表单更易于填写(无需多次提交表单以获得相关的错误消息)。

为了克服这个问题,如果某个东西是 readonly 并且您不想对其进行编辑,您可以将值存储在您的数据库中。此外,用户提供的值应该始终进行检查(和清理),因为再多的 JavaScript、HTML 或 CSS 都不会阻止知道他们在做什么的人添加新的或更改/删除现有值。

【讨论】:

  • 用户还可以添加其他输入,包括您不希望出现的字段。他们可以将<option> 元素添加到<select> 列表中。他们可以更改隐藏输入字段的值。等等等等。
  • @Pointy,“再多的 JavaScript、HTML 或 CSS 都无法阻止知道自己在做什么的人更改提交的值。”有点不清楚,但这指的是能够添加新的或删除/更改当前值。
  • 是的,我同意 - 抱歉,我并没有试图反驳你所说的,只是为了添加一些明确的例子(为了未来的 Stackoverflow 读者:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
  • 1970-01-01
相关资源
最近更新 更多