【问题标题】:How to prevent updating other record of database?如何防止更新数据库的其他记录?
【发布时间】:2012-05-30 20:01:42
【问题描述】:

我有一个表格,它从 phpMyAdmin 读取所有数据库并通过 php 代码对其进行破坏。 - 我也可以更新表格上的每个单元格,例如通过使用等于我数据库中 ID 的表格行和等于(名字,姓氏,密码)的列来改变工作正常。 因此,如果用户单击表格中的一个单元格,则 jquery 通过 ajax 发送参数 ID 和字段的列之一(名字、姓氏、密码)。 我的问题是什么? 我的问题是如何防止可以看到 jquery 代码的 haker 或智能用户,他会 了解他可以更改任何 ID 或密码参数的值,并且 ajax 可以更新数据库而不是正确的 ID? 假设我向用户表显示 10 行 ID 为 11-20 的用户表,用户会将 ID 参数 ID 更改为 500,它可能会发生。

$(document).ready(function()
{
    var COLUME, VAL,ROW,STATUS,DATASTRING;

    $('td').click(function() {
        COLUME = $(this).attr('class');   
      });
//****************
    $('tr').click(function() {
        ROW = $(this).attr('id');
        $('#display_Colume_Raw').html(COLUME+ROW);
        //$('#display').html(COLUME+ROW);
        $('#span' + COLUME + ROW).hide();
        $('#input'+ COLUME + ROW ).show();
      STATUS = $("#input" + COLUME + ROW).val();
    });
  //******************** 
    $(".edittd").mouseup(function() {
        return false;
    });
  //*************
    $(document).mouseup(function() {
        $('#span' + COLUME + ROW).show();
        $('#input'+ COLUME + ROW ).hide();
        VAL = $("#input" + COLUME + ROW).val();
        $("#span" + COLUME + ROW).html(VAL);
          if(STATUS != VAL){
          $('#statuS').removeClass('statuSnoChange')
            .addClass('statuSChange');
             $('#statuS').html('THERE IS CHANGE');
             DATASTRING=$('#display_Colume_Raw').html()+','+VAL;
            //******ajax code
                 //dataString = $.trim(this.value);
                      $.ajax({
                        type: "POST",
                         dataType: 'html',
                         url: "./public/php/ajax.php",
                         data: 'DATASTRING=' + DATASTRING, //{"dataString": dataString}
                             cache: false,
                             success: function(data)
                             {
                                //alert(data);
                                $("#statuS").html(data);
                                }
                             });
                      //******end ajax
                 }
                 else
                 {
                 //alert(DATASTRING+'status not true');
                 }

        });       
    });

【问题讨论】:

标签: php database security


【解决方案1】:

显示前端代码没有意义,因为这是您在后端实现的。

在通过 AJAX 调用的方法中,只需检查用户是否有权执行请求的操作。您可以在方法顶部进行单独检查,如果不允许用户返回,也可以将其构建到删除查询本身中,例如,通过添加 WHERE 子句确保这些 ID 是用户的 ID允许删除。

【讨论】:

    【解决方案2】:

    您不能在 MySQL 中分配每行权限,以便用户可以查看/编辑 A 行,但 B 行不能。

    如果您绝对必须有一个解决方案,那么有一种解决方法会有点痛苦,那就是不要对表使用直接查询(SELECT、INSERT 等),编写执行某种身份验证和/或验证的存储过程。该过程可以执行您想要的任何类型的复杂验证——检查用户 ID、检查列值等——并且只返回该用户有权查看和/或编辑的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      相关资源
      最近更新 更多