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

Php 如何防止用户在ajax请求中通过firebug更改变量,php,ajax,variables,firebug,Php,Ajax,Variables,Firebug,我允许我的用户喜欢更新或论坛主题。 因此,当用户试图喜欢其中一个时,我将通过Ajax 2发送内容,项目id(更新或主题)作为id(例如1321313213),其类型(“更新”或“主题”)作为字符串 然而,让我们假设有人试图喜欢一个id未触及的更新,但类型更改为“主题”(通过firebug或其他任何方式) 由于此组合不正确,因此不应进行此操作。。。由于两个表中可能同时存在此id,我如何确保发送的项目\u id是更新或主题 当前解决方案: 创建一个隐藏的输入元素,并添加5个随机字符(a-zA-Z0-

我允许我的用户喜欢更新或论坛主题。 因此,当用户试图喜欢其中一个时,我将通过Ajax 2发送内容,项目id(更新或主题)作为id(例如1321313213),其类型(“更新”或“主题”)作为字符串

然而,让我们假设有人试图喜欢一个id未触及的更新,但类型更改为“主题”(通过firebug或其他任何方式)

由于此组合不正确,因此不应进行此操作。。。由于两个表中可能同时存在此id,我如何确保发送的项目\u id是更新或主题

当前解决方案:

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

比如:

$random\u str=$this->my\u model->generateRandomString(5);
您的服务器端脚本(PHP)必须始终假定它获取的是虚假数据。永远不要仅仅依靠javascript来处理任何清理/验证


如果您的javascript可以确定作业是“更新”还是“主题”,我相信您的PHP也可以这样做。可能会使用更多的DB查询或类似的查询,但这是您必须付出的代价。

您从错误的角度看待问题。特别是从您的服务器端(PHP)代码

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

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

因此,如果您当前的代码不允许您在PHP代码中感到舒适,并自由决定是更新还是主题创建,那么您也需要更改服务器端代码(可能还有DB模式)

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


我认为你在试图发明你自己的保护。所以,上网阅读吧。

当然,我从不回复javascript数据,这就是为什么我总是通过php验证它们。。。但是这次我找不到一种方法来验证发送的ID是否是更新或主题,因为这个ID将来不能在两个表中共存。。。我也不能发送任何其他有助于验证的信息,因为这也可以修改……在这种情况下,我建议您添加一个标识符,告诉PHP“这是一个更新”。如果那个标识符不存在,abort.you能说得更具体一点吗?我也可以做的是,不在一个函数中调用一个ajax。。。我可以创建两个单独的函数,一个调用update函数,另一个调用topic函数,也可以解决这个问题。这两个哈希不是静态的。。。它们会发生变化,因为其中有一个随机变量,包含5个随机字符(salt)。。。如果我再加一点盐怎么办另一个解决方案是简单地转到函数1到最喜欢的更新,转到函数2到最喜欢的主题…我的坏消息是我错过了随机salt str。但是,再一次--数据到达您的服务器并不重要,只要它是有效的和CSRF防攻击的。我对CSRF做了一些研究,我认为它只适用于POST。。。因此,通过添加它,它将覆盖我,我可以使用我的方法而没有任何问题?
$random_str = $this->my_model->generateRandomString(5);
<input type="hidden" value="<?php echo $random_str.md5("update"); ?>" id="type" />