【发布时间】:2014-08-31 04:14:35
【问题描述】:
考虑以下示例: 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 可能会匹配任何其他行并因此执行更新操作。
您能否提出任何其他安全的方法来验证客户没有更改值?
here 提出的问题的答案正是我想要的。但是,该讨论中没有合适的解决方案/方法。
【问题讨论】:
标签: php mysql server-side-validation