2016-12-14 40 views
-1

我是一個新手,我只是建立了一個CRUD系統,但它根本不安全。編輯頁面在URL中有ID號,用戶可以簡單地隨機鍵入ID來訪問數據庫中的其他記錄。URl中的PHP/MySQL加密ID

http://example.com/example_edit.php?id=2

<?php 

include_once("connection.php"); 


$result = mysqli_query($mysqli, "SELECT * FROM mkregistrationchecklists WHERE login_id=".$_SESSION['id']." ORDER BY id DESC"); 
?> 

<tbody> 
<?php 
while($res = mysqli_fetch_array($result)) {   

    echo "<tr>"; 
    echo "<td>".$res['id']."</td>"; 
    echo "<td><span class='label ".$res['labelwarning']."'>".$res['status']."</span></td>"; 
    echo "<td>".$res['todaysdatetime']."</td>"; 
    echo "<td>".$res['tag']."</td>"; 
    echo "<td>".$res['serialnumber']."</td>"; 
    echo "<td>".$res['currentequipment']."</td>"; 
    echo "<td>".$res['company']."</td>"; 

    if ($res['status'] == "Submitted") { 
    echo "<td><a href='page_read.php?id=$res[id]' class='btn btn-default glyphicon glyphicon-eye-open'></a></td>"; 
} else{ 
    echo "<td><a href=\"page_edit.php?id=$res[id]\" class='btn btn-default fa fa-pencil-square'></a> | <a href=\"page_delete.php?id=$res[id]\" class='btn btn-danger fa fa-trash' onClick=\"return confirm('Are you sure you want to delete?')\"></a></td>"; 
} 

    echo "</tr>"; 



} 
?> 
</tbody> 

什麼是確保這一目標的最佳途徑?

我應該這樣加密嗎?

$secure_id = $_GET['id']; 
$decryped_id = base64_decode($secure_id); 

我更新了我的代碼,即時根據login_id保存記錄,但它仍然看起來與URL中的id標記不專業。

+0

基地64編碼是*不*加密。如果你想隱藏這個id,你需要生成一個令牌(一個salted hash或更好的UUID),你可以將它存儲在數據庫中,並與其他記錄信息一起存儲。 –

+1

這與安全無關,這是開發架構。首先請記住,如果我是被授權訪問具有ID 1,2,3,4的記錄的用戶,則無關緊要,我可以通過URI手動切換頁面並訪問所有授權ID的數據。因此,如果您的用戶有權訪問所有記錄ID以編輯記錄,則無關緊要。您應該在您的頁面頂部放置一個支票(中間件),無論該請求ID是否授權給當前用戶。 – webDev

+1

另外,最重要的事情(正如@Shailesh所說)正在檢查權限。誰在乎用戶是否知道物品ID,是否阻止未經授權的訪問?如果你所做的只是模糊了信息,這就是所謂的默默無聞的安全性,它不是一個好主意。您需要檢查用戶的授權以查看/更新/刪除數據,而不管它們提供了哪些項目標識。 –

回答

0

您必須添加用戶/記錄擁有獨特的識別到的所有SQL查詢,通常爲:

$query = "SELECT * FROM table WHERE id = 1 AND user_id = 2"; 

用這種方法,你可以確保用戶只能訪問自己的記錄。登錄用戶的ID可以放置在SESSION的某處。

不推薦使用隱藏或哈希ID,這是一種反模式,並且security through obscurity

+0

正確,但是如果他的數據表中沒有user_id,只需創建一個新表,您可以在其中放置record_id和user_id關係並進行檢查。 – webDev

+1

是的,絕對的,具體的實現取決於他的用例,這只是爲了演示的目的。 – Artegon