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

时间:2014-08-15 12:22:22

标签: javascript php jquery html

我刚刚发现了一个我无法找到任何解决方案的错误,我想就此提出建议。问题是有一些隐藏的输入类型,用于存储已经保存的数据的ID,如每人ID已经保存等等。

我只是尝试并手动更改隐藏变量的值,使用谷歌浏览器并提交表单,令人惊讶的是我没有得到应该在那里的ID,而是我收到了我更改的ID。例如,22我改变了它的值263我收到了263,而我应该收到22。我希望22不是那个263。

我很难解释,但我已经尽力传达我的问题,请帮助并告诉我,我应该如何存储一些不可编辑的隐藏价值。

任何想法?

6 个答案:

答案 0 :(得分:5)

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

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

Web开发规则#3:您无法让客户端值得信赖

如果用户无法对其进行编辑,请不要将其提交给他们。

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

将“秘密”值存储在SESSION上。当用户回发时,它们将可用。

答案 1 :(得分:2)

您无法控制用户将HTTP请求放入服务器的数据。

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

这是浏览器工作方式的基本功能 - 实际上有人可以将数据伪装成您的表单,并在字段中添加他们想要的任何值 - 甚至可以添加额外的字段。

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

答案 4 :(得分:1)

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

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

这有点取决于您的应用程序的域名,如果它是内部软件,那么我不会特别担心它。

答案 5 :(得分:0)

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