2016-08-12 52 views
1

我正在構建一個應用程序,我希望用戶能夠刪除一些項目。安全的PHP - > Ajax刪除基於ID的項目

我的刪除按鈕的代碼

<a class='delete_item' id='".$rs['id']."'><i class='icon-cancel'> </i></a> 

JS文件被用戶點擊後

... 
$.ajax({ 
    type:'POST', 
    url:'set_order.php', 
    data:'delete_item='+item_id, 
    beforeSend: function() { 
     }, 
    success:function() { 
    window.location.reload(true) 
    } 
}); 
... 

的set_order.php文件打開調用,這個代碼處理

if($_POST['delete_item']) { 
$id = $_POST['delete_item']; 
$sql = "DELETE from list_items where ID = $id"; 
$query = $pdo->prepare($sql); 
$query->execute(); 
} 

一切工作正常,但它不是安全的:)如果用戶檢查頁面並將「id」的值更改爲如圖所示 enter image description here

點擊「刪除」按鈕,用戶改變的id項將被刪除而不是原來的id。

什麼是檢查數據的最佳方法?

+0

用戶是否允許刪除任何項目? – iyop45

+0

@ iyop45僅添加它們添加的項目,我從數據庫中選擇它們並僅向創建它們的用戶顯示關閉按鈕。 – Radu033

+1

在後端建立一個「授權者」,用於檢查是否允許該用戶刪除該特定項目。 – Jeff

回答

2

一旦您收到刪除項目的請求,請檢查他們是否擁有該項目,如果他們沒有,請不要刪除它。

if(isset($_POST['delete_item'])){ 
    if(userOwnsItem($_SESSION['id'], $_POST['delete_item']){ 
     // Valid request 
    }else{ 
     // Invalid request 
    } 
} 

$_SESSION['id']是在用戶和功能userOwnsItem的id對上述物品進行並檢查一個查詢如果所有者具有相同的ID的用戶。

0

首先,這不是AJAX,因爲您重新加載頁面。您應該根據響應和調用編輯DOM元素,而不是手動重新加載。事實上,如果你在php中執行DELETE選項,它將會更好和更安全地以正常方式執行,只是重定向到某個頁面,並且在成功刪除後,您將重定向到某處或返回到同一頁面。如果你想要一個真正的Ajax請求,並希望保護該操作並阻止其他用戶這樣做,那麼有很多方法和方法。您可以檢查用戶是否允許刪除所請求的ID,您可以授權某些用戶能夠執行此操作。最重要的是數據傳輸。您永遠不應該讓未加密的數據通過。所以,你應該基本上做到這一點:

  1. 檢查用戶是否可以訪問該功能和頁面
  2. 檢查用戶是否擁有他想要刪除
  3. 發送ID的方式目前還不清楚它是什麼東西 - 很多功能都是在PHP手冊中完成的。最好的方法是使用自己的2路算法 - 使用特殊字(鹽)進行加密/解密。
-1

insert「echo $ sql;」在php結束測試你的SQL是否正確

+1

這是如何阻止惡意用戶的? – Barmar