【问题标题】:Deleting Row AJAX删除行 AJAX
【发布时间】:2017-06-20 00:25:32
【问题描述】:

通过ajax请求删除一行有更聪明的方法吗?

这里的代码我用的,也许有更好更安全的方法。

按钮

<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');
                }
            });
        }); 

【问题讨论】:

  • messages_sql.inc.php 是做什么的?它是否检查用户的会话以确认他们有权删除他们将要删除的记录?
  • 你不应该编造你自己的属性。使用data-msg_id 而不是msg_id
  • messages_sql.inc.php 只有 SQL QUERY $msg_id = $_POST['msg_id']; $sql = "从 db_messages 中删除 msg_id = $msg_id";
  • 只要服务器进行适当的验证,这是正常的做法。
  • 你应该使用准备好的语句来防止 SQL 注入。

标签: php ajax security


【解决方案1】:

基于此评论

messages_sql.inc.php 只有 SQL QUERY $msg_id = $_POST['msg_id']; $sql = "从 db_messages 中删除 msg_id = $msg_id";

存在一些安全问题:

在不验证 AJAX 请求来自您信任的人的情况下,互联网上的任何人都可以从您的表中删除记录。如果您的应用程序需要用户登录,请跟踪他们的会话并在处理 AJAX 请求时对其进行检查。否则,将 CSRF 令牌与 AJAX 请求一起传递,以至少确认它来自实际浏览您页面的人。

接下来,您可能需要从db_messagesconfirm the user making the request is allowed to delete the row。例如,是否只允许用户从该表中删除自己的行?如果是这样,您需要根据活动会话检查他们的用户 ID。

还可以使用带有参数化查询的准备好的语句来避免 SQL 注入攻击。

【讨论】:

    猜你喜欢
    • 2017-02-28
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多