2017-03-31 39 views
0

你好傢伙我正在一個小圖片上傳網站。我發現了一個可以利用的問題,我會告訴你。安全的方式傳遞圖像ID到PHP文件

我使用一個foreach顯示每一個圖像所以在HTML 1個圖像看起來是這樣的:

<a href="edit.php?id=ID_OF_PIC"><img src="IMG_PATH"></a> 

寫在瓶蓋的事情只是一個例子,但有工作的值。 edit.phpid用於更新圖片名稱。但如果我是一個偷偷摸摸的聰明的黑客,我可以更改href中的id,並且像這樣我可以更換另一個帖子。那麼,我如何/在哪裏可以保存/隱藏id以便沒有人可以改變它?

+0

'a'標籤不會發送發佈數據,您必須使用'method = post'的形式,並且'沒有人可以更改它',而不是客戶端瀏覽器可以操作** everthing **。去瀏覽器中打開F12,在那裏你可以改變生活everthing,也就是你想要的JavaScript代碼。 – JustOnUnderMillions

+0

@JustOnUnderMillions我不是指'發佈數據'後我的意思是1項。實際上它沒有作爲'GET'傳遞。 – WasteD

+0

@JustOnUnderMillions爲了更好的理解,更改了它。 – WasteD

回答

1

@Qirel找到了一個簡單的解決方案。其實並不是很難做到這一點。在我的例子中,我只需要檢查編輯圖像的用戶是否爲圖像的所有者。

1

簡單的解決方案:使用一個窗體的foreach圖像。像:

<form action="edit.php" method="post"> 
    <input type="hidden" value="ID_OF_PIC" name="id"> 
    <input type="hidden" value="TOKEN" name="tokenID_OF_PIC"> 
    <img src="IMG_PATH"><input type="submit" value="edit"> 
<form> 

在發送表單之前,創建TOKEN並將其保存在與該ID相關的會話中。

$_SESSION['tokens'][ID_OF_PIC]='TOKEN_FOR_ID_OF_PIC';

令牌應該爲每個圖像ID的唯一字符串。

當表單被髮布時,你得到了id和令牌。 你知道可以檢查ID和TOKEN是否有效。

if($_SESSION['tokens'][ID_OF_PIC]==$_POST['tokenID_OF_PIC']){}

所以這allowes這是由服務器通過形式與正確的令牌發送的用戶只能編輯照片。

但是,這並不妨礙用戶在瀏覽器中打開圖片正常瀏覽器來查看它,當IMG_PATH也有它的ID。

+0

感謝您的努力,我會將您的答案標記爲正確,但@Qirel給了我一個更簡單的解決方案,所以生病使用這一個。謝謝! – WasteD

+0

@WasteD如果您有更好的解決方案,請將其作爲答案發布,並接受它。肯定upvote其他答案你覺得有用,但不只是接受一個很好,它不會幫助其他網站的用戶 – Steve

+0

@Steve其實Qirel應該發佈解決方案。 – WasteD