考虑以下示例: HTML 页面:
<input type="text" name="update_12" />
名称为“update_12”和新文本为:“Some another data”的输入框通过表单发送到服务器端 PHP 脚本(例如 process.php)
数据库格式:
=====================
message_ID Message
=====================
12 Some data
13 Another data
如果 PHP 脚本在输入名称上爆炸为:
foreach ($_POST as $key => $value) {
if(strstr($key, "update_")){
$required_id = explode('_',$key)[1];
$query = "UPDATE <db_name> SET `Message`='".$_POST[$key]."' WHERE `message_id`='".$required_id."'";
}
}
这将使用 message_ID 的新消息更新数据库:12
我是 PHP 新手,正在探索 MySQL 中的基本数据存储、更新、检索和删除。
由于客户端可以更改输入字段的名称:“名称”并发送另一个值进行更新。例如:如果客户端打开firebug,将输入框的“name”字段更改为“update_13”,他的操作将覆盖另一个用户的Message。
我尝试通过尝试在 facebook 中删除状态来对此进行研究。从对要删除的 POST 数据的初步观察,我可以看到一些重要的参数被发送为删除:
impression_id=456ab622
profile_id=100005552221116
__user=100005552221116
story_fbid=540912345678911
对于帖子删除,关联的 ID 如下所示:story_fbid。当我将其更改为可能是:540912345678912(最后一位已更改)并单击删除时,fb 需要一段时间并以错误消息响应:无法完成此操作。此错误消息在发送删除的 POST 请求后出现(修改 story_fbid)。POST 请求的响应包含显示在模式窗口中的错误消息。
我可以想到一种方法,其中 ID 及其哈希(MD5/SHA1/SHA2)存储在 DB 中,并在收到 id 后,获取它的哈希,如果匹配,更新 DB 中的该行。然而,(在我们的例子中)哈希值 13 可能会匹配任何其他行,从而执行更新操作。
您能否建议我们可以验证客户端没有更改值的任何其他安全方法?
这里提出的问题的答案正是我正在寻找的。但是,该讨论中没有适当的解决方案/方法。