2016-09-22 113 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