如何保护隐藏字段数据不被更改

Posted

技术标签:

【中文标题】如何保护隐藏字段数据不被更改【英文标题】:How to protect hidden field data from being change 【发布时间】:2013-11-03 04:03:51 【问题描述】:

我正在使用一个插件不错的 paypal lite 按钮,在该按钮中,我对携带交易资金、商家电子邮件 ID 的隐藏字段感到不安全。通过萤火虫,我编辑了这些字段值,不幸的是我编辑的值成功地转到了贝宝。

我试过readonly 也没有帮助。 那么我该怎么做才能避免这种情况.....

$f .= '<input type="hidden"   name="business" value="'.$a['email'].'" readonly/>';
        $f .= '<input type="hidden" id="customer_name" name="cmd" value="'.$a['command'].'" readonly/>';
        $f .= '<input type="hidden"  name="item_name" value="'.$a['name'].'" readonly/>';
        $f .= '<input type="hidden" id="pay_amount" name="amount" value="'.$a['amount'].'" readonly/>';

任何链接、任何想法、任何建议都将不胜感激。

谢谢

【问题讨论】:

不幸的是,没有办法阻止客户端 html 的更改。但是您可以尝试将数据存储在 php 会话中? 以加密格式保存这些电子邮件和价格,例如 base64_decode() 和 base64_encode() 或使用 salt() 所以没有办法使隐藏字段不可编辑... 一切都可以在客户端进行编辑。如果可以完成操作,您必须验证服务器端 【参考方案1】:

这不是您必须担心的事情*。用户将始终能够编辑客户端数据。因此,一个人可以更改他们的数据,以便他们在其他地方发送付款,这与他们登录自己的帐户并在任何他们想要的任何地方发送付款相同。您必须担心的是人们能够更改其他用户的付款信息。我不是安全专家,但这就是为什么您要清除网站上显示的所有动态数据(即不要信任数据库中的数据)。您还可以通过 TLS 提供页面,以防止流量被操纵(例如通过受感染的路由器)。

【讨论】:

【参考方案2】:

记录在案

步骤 1) 生成一个唯一的验证 ID。因此,如果信息被更改,您可以再次验证。

$key=md5($a['email'].$a['name']...$SOMESALT);
$f .= '<input type="hidden"   name="validation" value="'.$key.'" />';

第 2 步)当您验证信息时,您可以验证完整性

$validation=@$_POST['validation'];
$key=md5(@$_POST['email'].@$_POST['name']...$SOMESALT); // again
if ($key!=$validation) 
    die('nope');

可选:您可以通过生成随机盐并存储在会话中来强制执行安全性。

对于这种情况,MD5 是相当安全的。

【讨论】:

以上是关于如何保护隐藏字段数据不被更改的主要内容,如果未能解决你的问题,请参考以下文章

javascript 保护变量不被随意修改------优雅的编程

Objective-c:为啥在使用 KVC 时私有 ivars 不被外部访问隐藏

如何保护公共 API(无凭据)不被利用?

如何保护 MySQL 用户名和密码不被反编译?

Php代码如何实现代码保护,不被窃取?

如何保护解密密钥不被反编译?