为什么人们将变量存储在隐藏的表单输入中而不是以后访问变量?

时间:2014-03-07 11:51:39

标签: php forms security input hidden

为什么人们会存储这样的变量:

<input type="hidden" name="id" value="<?php echo $bookid; ?>">

而不仅仅是在需要时访问$bookid

这有什么安全漏洞吗?我以为你可以用开发工具来改变输入的价值?将它们存放在那里是不安全的。

2 个答案:

答案 0 :(得分:1)

除了整个客户端与服务器端之外,安全“问题”应该是不存在的。如果有人确实创建了一个带有“隐藏”表单字段的页面来真正将其隐藏起来,那么用户应该永远无法找到内容,即某人“将会有一段糟糕的时间”。

隐藏字段的目的是隐藏它们不是为了安全,而是因为用户不需要它。 随机示例:也许我需要存储您正在查看的相册的ID。你不需要知道,你为什么要知道这一点。但是发现我在后端称这个专辑2134125并不重要。即使你改变它,唯一会发生的事情是你刚刚选择(购买,开始收听,无论你的网站做什么)一个不同的专辑。无法销售的专辑,价格,所有类似的东西应该基于ID,而不是其他东西,所以你不能破解它,你只是迷惑自己。

如果您确实需要安全的隐藏字段,则有一个选项btw: 有时我们需要在隐藏字段中发送实际数据,而这些字段我们不会想要进行更改。对于某些支付提供商而言,情况确实如此。 (我不打算这个)。这通常是通过添加具有散列形式的第二个隐藏字段来安全的。这是通过支付提供商和服务器已知的秘密进行的,但在表单中不可用。如果你做一些哈希,比如sha1(hiddenvalue + secret),添加它,并在发送表单后进行比较,如果隐藏值被更改,你将得到一个不同的has(所以不相等,所以是一个错误)。

答案 1 :(得分:0)

你在搅拌东西。 $bookid是PHP变量,仅在服务器中可见。它以隐藏的形式存储,因此浏览器可以使用它(通过Javascript,通过对服务器的新请求,或两者)。 $bookid在客户端是不可见的,在离开服务器之前它将被其值替换。