我有一个上传和更改个人资料图片的系统,还有一个恢复到默认照片的链接,我看到从控制台浏览器更改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?
答案 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';
}
}