2014-02-14 30 views
0

问题验证/限制进行修改隐藏字段

我开发的应用程序(在PHP)中,我会告诉用户他做基于以前的条目一些派生值和用户的报告将检查正确性 - 如果正确,则用户可以按保存按钮将其提交到数据库。否则,用户应该能够编辑以前的条目,但他不应该能够更改该报表中的派生值。

为此,我将这些值包含在隐藏的输入字段中,因此普通用户无法更改这些值,但是如果Web开发人员可以在浏览器中检查元素并更改这些值。

我们可以预防这些类型的攻击吗?如果是这样,怎么样?

我的想法

我可以让所有的隐藏字段的字符串,对其进行加密,并保存在另一个隐藏字段 - 回发后我可以交叉验证实际值和加密值。

这是实现这一目标的正确方法吗?以及如何做到这一点 你觉得呢?

+1

你有没有想过使用会话变量,而不是使用表单域? – wribit

+0

@wribit谢谢我没有这样想,如果我需要传递30个值,它会更好吗?或造成任何开销? – ddw147

+0

如果有许多用户(比如说100+)要记录一次,需要相同的会话变量,那么会造成开销 - 当然......但是为了您的担心,我认为这是一个值得冒小风险的解决方案。 – wribit

回答

1

要很好地了解您正在尝试做什么,但也许解决方案可能是显示禁用了输入字段的表单(http://www.w3schools.com/tags/att_input_disabled.asp),然后在页面底部显示一个表单,例如这些信息是否正确? ..然后有1个选项保存,另一个选项是否/编辑。然后做一个if(isset($_POST['edit'])) { .. run form again but with input fields not disabled }

只有你的SQL更新代码在代码的'编辑'部分,并有一个单独的SQL更新代码的保存部分,只是将值从你抓取他们从任何地方,到任何地方他们需要成为。

希望有所帮助。

1

如果有需要填写表单的派生值,但不想使用隐藏字段 - 我建议使用会根据需要包含那些派生值的会话变量。根据这些表格中有多少表格以及多少用户将使用它们 - 这些字段(30年代)的开销通常可以忽略不计,当然如果不需要的话可以丢弃它们。

+0

假设用户在case1的一个选项卡中打开数据,然后session var将为此,在另一个选项卡中他为case2打开数据,然后是所有会话var case 2,无论是哪种形式的SAVE按钮,他将按下它将只保存案例2 – ddw147

+0

yes ,我现在看到 - 那么我能想到的唯一方法就是通过隐藏字段来完成 - 但是要加密它们的内容。 – wribit

+0

你可以建议更好的加密技术,这个 – ddw147