2017-06-20 85 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注入攻击。