2017-06-20 93 views
2

有更聰明的方法來刪除ajax請求的行?刪除行AJAX

這裏我使用的代碼,也許有更好更安全的方法。

BUTTON

<a href="#" msg_id="<? echo $msg_id; ?>" class="delete-btn"> DELETE </a> 

AJAX

$('.delete-btn').click(function(){ 

      // Confirm 
      ///if (! confirm('Are you sure want to delete this row?')){ 
      // return false; 
      // } 

      // id need to delete 
      var msg_id = $(this).attr('msg_id'); 

      // Current button 
      var obj = this; 

      // Delete by ajax request 
      $.ajax({ 
       type : "post", 
       dataType : "text", 
       url : 'messages_sql.inc.php?a=message_delete', 
       data : { 
        msg_id : msg_id 
       }, 
       success : function(result){ 
        $(obj).parent().parent().remove(); 
        window.location.assign('messages.php?msg=deleted'); 
       } 
      }); 
     }); 
+0

'messages_sql.inc.php'是做什麼用的?它是否檢查用戶的會話以確認他們有權刪除他們將刪除的記錄? – chris85

+2

你不應該組成你自己的屬性。使用'data-msg_id'而不是'msg_id'。 – Barmar

+0

messages_sql.inc.php只有SQL QUERY $ msg_id = $ _POST ['msg_id']; \t \t \t $ sql =「DELETE FROM db_messages WHERE msg_id = $ msg_id」; – user1504222

回答

0

基於此評論

messages_sql.inc.php有SQL查詢僅$ MSG_ID = $ _ POST [ 'MSG_ID']; $ sql =「DELETE FROM db_messages WHERE msg_id = $ msg_id」;

有幾個安全問題:

,而不用驗證AJAX請求是從你信任的人,在互聯網上的任何人都可以從表中刪除記錄。如果您的應用程序需要用戶登錄,請記錄他們的會話並在處理AJAX請求時檢查它。否則,傳遞一個帶有AJAX請求的CSRF令牌,至少要確認來自實際瀏覽您網頁的人。

接下來,您可能需要confirm the user making the request is allowed to delete the rowdb_messages。例如,用戶是否只允許從該表中刪除自己的行?如果是這樣,您將需要檢查他們的用戶ID對活動會話。

還可以使用帶參數化查詢的預準備語句來避免SQL注入攻擊。