HTML隐藏输入不应该是可编辑的


HTML hidden input shouldn't be editable

我刚刚发现了一个bug,我找不到任何解决方案,我想听听你的建议。问题是有一些隐藏的输入类型,在那里存储已经保存的数据的ID,如每个人的ID,如果它已经保存等。

我只是试着改变那个隐藏变量的值手动,使用谷歌浏览器和提交表单,令人惊讶的是,我没有得到应该在那里的id,而是我收到了我改变的id。例如,有一个值是22,我把它改成了263,我收到了263,而我应该收到22。我想要那个22来而不是那个。

这很难解释,我知道,但我已经尽了最大的努力来传达我的问题,请帮助和建议我,我应该如何存储一些不可编辑的隐藏值。

任何想法?

Web开发规则#1:永远不要相信客户端

Web开发规则#2:永远不要相信客户端

Web开发规则#3:你不能让客户端值得信赖

如果用户不能编辑它,就不要给他们。

正如其他人所说,有几种方法可以处理这种情况。最常见的是在服务器上使用SESSION变量,几乎在任何地方都可以使用。

将"secret"值存储在SESSION上。

你无法控制用户在HTTP请求中向你的服务器发送什么数据。

相反,当接收到请求时,在服务器上使用身份验证和授权,以确保允许用户提交他们提交的值。

如果您想要跟踪从一个页面到另一个页面的数据,我会使用会话。这是在服务器上跟踪的数据。

//page one.php
$_SESSION['id'] = 22;
//page two.php
echo $_SESSION['id']; //22

这是浏览器工作的基本功能-本质上有人可以冒充您的表单在字段中添加任何他们想要的值-甚至添加额外的字段。

如果这是一个问题,考虑将数据从隐藏字段移动到会话变量

如果隐藏字段的安全性很重要,请不要在客户端包含它们。客户端变量非常容易修改。

您可能应该将它们存储在会话中,因此它们不会输出到客户端。如果页面上需要它们,则使用AJAX来获取它们。

这取决于你的应用领域,如果是内部软件,我就不会特别担心

看起来不像bug。你害怕什么?这些字段不会被访问者访问和更改。如果你担心有人会破解你的访问者的http请求并改变他的订单(例如),那么https连接应该会有所帮助。