如何防止用户在ajax请求中通过firebug更改变量

时间:2012-03-04 09:01:35

标签: php ajax variables firebug

我允许用户收藏更新或论坛主题。 因此,当用户尝试收藏其中一个时,我将通过Ajax 2发送,item_id(更新或主题)作为id(例如1321313213)及其类型(“更新”或“主题”)作为字符串。

然而,让我们说某些人尝试更新ID未更新的更新但类型更改为“主题”(通过firebug或其他任何方式)......

由于这种组合不正确,所以不应该这样做...我如何确保发送的item_id是更新或主题,因为这个ID可能在两个表中共存???

当前解决方案:

创建隐藏的输入元素并添加为值5个随机字符(a-zA-Z0-9)和md5类型名称(更新或主题)

像:

$random_str = $this->my_model->generateRandomString(5);
<input type="hidden" value="<?php echo $random_str.md5("update"); ?>" id="type" />

所以,当我尝试验证数据以检查它是否是更新或主题时,我将前五个字符的类型拆分,然后检查后面的字符是否为md5哈希是更新还是主题并继续验证

我希望得到一些帮助,以防这种情况也可以改变......

2 个答案:

答案 0 :(得分:2)

您的服务器端脚本(PHP)必须始终假设它正在获取虚假数据。永远不要仅仅依靠javascript来处理任何清理/验证。

如果您的javascript可以确定作业是“更新”还是“主题”,我相信您的PHP也可以这样做。可能使用更多的数据库查询或其他一些,但这是你必须付出的代价。

答案 1 :(得分:0)

您正在从错误的角度看问题。特别是来自你的服务器端(PHP)代码。

您的服务器获取数据。它获取的数据类似于:user(来自会话),idtype。您的服务器需要提出一个问题:它是有效的数据吗?如果是 - 将其保存到DB;如果不是 - 请不要将其保存到DB。就这么简单。

您可以从这个角度看:您的客户端代码只是与您的服务器通信的一种方式。另一种方法是使用Web浏览器+ firebug。它完全有效地用于您的服务器端应用程序。而且你的PHP代码不应该关心请求是如何到达它的。

因此,如果您当前的代码不允许您在PHP代码中感到舒服并自由决定是否更新或创建主题,那么您需要更改服务器端代码(也可能是数据库架构)。

您当前的解决方案并不好,因为如果我知道如何使用firebug,我可能会发现“9d9b68ac2b1de18d3712096354b3c3a5”表示“主题”而“3ac340832f29c11538fbe2d6f75e8bcc”表示“更新”。

我认为您正试图发明自己的CSRF保护。所以上网并阅读它。