防止更改输入值

时间:2016-09-22 01:19:39

标签: php html

我有一个上传和更改个人资料图片的系统,还有一个恢复到默认照片的链接,我看到从控制台浏览器更改ID的值(在chrome中检查元素)我可以将我上传的图像分配给另一个非常糟糕的用户,比如我可以避免这种情况吗?

的index.php

<form name="form" method="post" action="dashboard_reset_image.php">
 <input type="hidden" name="id" value="'.$id.'">
 <input type="submit" class="btn btn-danger btn-img-user" value="Reset"/>
</form>

dashboard_reset_image.php

 $ID = $_POST['id'];
 $db = DB::getInstance(); 
 $fields=array('img'=>'no-image.jpg');
 $db->update('profile',$ID,$fields);
 Redirect::to("index.php?id=$ID");

最后一个代码的作用是更新&#34; img&#34; &#34;配置文件中的列&#34;放置默认图像的表(不擦除服务器的图像并将其保存为参考)。

当我不断更改HTML生成的不安全ID?

1 个答案:

答案 0 :(得分:1)

更改

 $fields=array('img'=>'no-image.jpg');

 $fields=array('img'=>$ID.'.jpg');

要防止图像更新,请使用文件名中的id。

为防止有人更改浏览器中的ID,您需要使用会话存储将ID保存在服务器上,然后进行测试以确保提交的数据具有相同的ID。

这样的内容将保存发布的ID:

session_start();
if (!isset($_SESSION['id']) && isset($_POST['id'])) {
    $_SESSION['id'] = $_POST['id'];
}

在HTML中填充id,如下所示:

<input type="hidden" name="id" value="<?= $_SESSION['id'] ?>">

当您从客户端收到数据时,要测试id是否相同,您可以使用:

if (isset($_SESSION['id'],$_POST['id'])) {
    if ($_SESSION['id'] !== $_POST['id']) {
        die('Ids do not match');
    } else {
        echo 'Update the image here';
    }
}