HTML 输入只读安全风险?
Posted
技术标签:
【中文标题】HTML 输入只读安全风险?【英文标题】:HTML input readonly security risk? 【发布时间】:2011-04-05 20:34:34 【问题描述】:依赖设置为只读的 html 输入字段的数据是否安全?只读字段的目的是什么?
我知道禁用字段不会推送到 $_POST 而只读字段?本质上,我想要的是我的表单中的一个动态值,它对用户来说是不可更改的。
将它放在会话中是否更合适,或者我有什么选择?
编辑: 正如下面的一些人提到的,将其存储在会话中是一个更好的主意,尽管在阅读Storing objects in session 之后,我担心性能和会话数据使服务器过载。有什么建议?只需 unset() 任何不再需要的会话数据是安全的。 (类似于内存管理,但在会话级别?删除不需要的。)
【问题讨论】:
相关***.com/questions/7730695/… 【参考方案1】:在用户不能将文本放入只读字段的意义上,它会起作用。但是任何人都可以轻松修改这些字段来伪造帖子。
所以不,它不是一个很好的安全性。
对于您的其他问题,您应该向我们提供有关您需要该只读字段的更多详细信息。也许会话适合您,也许您不需要做任何事情,然后在提交表单时不要将只读字段中的任何内容写入数据库。
【讨论】:
就现有应用程序的最少修改来解决此问题而言,将只读值散列在一起并向包含散列值的表单添加一个附加字段是否安全?当然哈希也可以伪造,但很可能它们不会产生正确的哈希值。至少它增加了对数据的有效性检查。 @Chris 不,这还不够。您不应该依赖只读字段在会话中保留数据。从根本上讲,这在尽可能低的级别上是不安全的,并且在其上分层安全并不能使其安全。 @meagar 我在一定程度上同意您的观点,但是,这与安全性无关,因为仅仅能够验证只读字段中的数据实际上就是我们放在那里的数据。不多不少。我了解这方面的安全性,但例如,我们希望能够引用给定对象的系统 ID,并且我们确实对站点内给定对象的查询实施访问控制。因此,由于身份验证已经到位,因此仅散列数据以在服务器上验证其正确性似乎更简单/直接。 由于身份验证已经到位,我们假设它使用会话机制。然后$_SESSION['my_precious_read_only_variable'] = 'Why bother to ask questions if you have already disagree with the answer?';
是最简单/直接/原始的方式
@Chris 您是否正在做一些琐碎的事情,例如在表单中保留正在编辑的记录的 ID?如果您验证他们可以访问他们正在更新的记录,那么您就可以找到。但是使用隐藏的输入字段 - 用户没有理由看到这样的管道细节。【参考方案2】:
如果输入是只读的,但无论如何您将其值传递给服务器,那是不安全的。操作页面的源代码非常容易。 如果你想记住一些价值,是的,使用会话。您可以在只读输入中显示它,但永远不要通过这样的输入传递值。编辑: Iznogood是的,有人可以修改 POST 值并发送假标头。
【讨论】:
【参考方案3】:不。依赖设置为只读的 html 输入字段的数据是不安全的。依赖任何客户提供的数据也不安全。 将它放在会话中是唯一可能的解决方案
【讨论】:
【参考方案4】:使用 Firebug,您可以轻松地进行可写操作,因此您甚至不必使用 curl 之类的东西来伪造发布请求。
如果它真的是只读的,那么您可以在服务器端忽略它,因此即使更改值也不会对您的数据做任何事情(例如在您的数据库中)。
对我来说,向某人显示只读文件的原因是使用与填写的预览相同的表单。但在这种情况下,您不应该使用它再次将数据发送到您的后端。
对于第二个问题:会话数据通常存储在服务器上的文本文件中。它将在一段时间不活动后被删除(标准为 24 分钟)。你不应该关心数据有多大。我还使用 session 为某些脚本存储了数百兆字节。但是,在数据成功保存到数据库 = 或任何其他持久媒体后,从会话中取消设置表单数据是一个好主意)。将其存储在会话中还可以让您重新填写表单,即使用户没有按下后退按钮或浏览器没有正确恢复数据。
【讨论】:
以上是关于HTML 输入只读安全风险?的主要内容,如果未能解决你的问题,请参考以下文章