【问题标题】:Codeigniter Ajax DeleteCodeigniter Ajax 删除
【发布时间】:2021-08-18 11:33:49
【问题描述】:

我正在尝试使用 codeigniter3 开发一个项目。我正在尝试删除表中的数据。表格如下;

<tbody>
  <tr id="1">
   <td>text</td>
   <td>text</td>
   <td>text</td>
   <td>text</td>
   <td><button type="button" id="1"></button></td>
  </tr>
</tbody>

我删除数据的ajax函数如下;

$.ajax({
    type: "POST",
    url: base_url+"controller/delete", 
    cache:false,
    data:{[csrfName]:csrfHash,id:id},
    success: 
       function(data){
         $('#tableid tbody tr#'+id).remove();
       }
 });

但是如果在页面上手动更改表id,它会删除数据库中的匹配数据。比如我打开页面源,更改按钮id,然后按下按钮,就会删除我刚才给的id值。我应该怎么做才能避免外界干扰?

提前感谢您的帮助!

【问题讨论】:

    标签: jquery ajax codeigniter


    【解决方案1】:

    比如我打开页面源,更改按钮id,然后按下按钮,就会删除我刚才给的id值。

    这是预期的正确行为。在这种情况下,用户正在手动修改客户端值,并且正在制作他们想要向服务器发送的任何请求。完全允许用户在自己的计算机上执行此操作。

    从技术上讲,用户甚至根本不需要使用浏览器。他们可以只检查 DOM、网络请求等,然后开始在 Postman 之类的工具中制作自己的请求。服务器无法区分,也不需要区分。一个请求就是一个请求,不管是什么客户端程序发送的。

    如何避免外界干扰?

    你没有。因为这不是“外部干扰”。用户可能以意想不到的方式使用系统,但仍然是正常使用系统。

    从服务器的角度考虑。这两个动作有什么区别?:

    1. 用户打开 DOM 源并手动设置记录 B 的 ID 以匹配记录 A 的 ID。用户在 UI 中单击记录 B。系统删除记录 A,因为这是发送的 ID;或者...
    2. 用户单击记录 A。系统删除记录 A,因为这是发送的 ID。

    在这两种情况下,从服务器的角度来看,差异为零。用户选择删除该记录,并且被允许这样做,用户成功删除了该记录。在第一种情况下,他们只是以一种奇怪且低效的方式进行。但那又怎样?最终结果是一样的。在服务器上执行了完全相同的操作,没有造成任何损害。

    没有必要付出大量努力来阻止用户手动制作他们自己对服务器的请求。充其量您最终会得到一个极其复杂的系统,该系统仅在可能使用户稍微困难方面取得成功,但实际上并没有阻止任何事情。

    在用户计算机上运行的任何代码都受用户支配。但只要服务器端代码是安全的,那么用户就没有什么是他们在 UI 中无法做到的。

    【讨论】:

    • Tnx david,非常感谢您为我解惑。祝你好运
    猜你喜欢
    • 1970-01-01
    • 2017-03-29
    • 2016-04-05
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    相关资源
    最近更新 更多