2016-09-22 114 views
0

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

是什么让这最后的代码是更新在 “配置文件” 表中的 “IMG” 列上放置一个默认图像(不擦除服务器的图像并将其保存为参考)。

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

回答

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']; 
} 

填充ID在HTML像这样:

<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'; 
    } 
} 
+0

感谢您的回答,我在看代码,并认为这是最方便的tim é...我有疑问...它可能在发布的更新结束时销毁会话? – GePraxa