安全的PHP - > Ajax基于id删除项目

时间:2016-08-12 10:59:31

标签: php mysql ajax

我正在构建应用,我希望用户能够删除一些项目。

我为删除按钮获取了此代码

<a class='delete_item' id='".$rs['id']."'><i class='icon-cancel'> </i></a>

单击

时调用js文件
...
$.ajax({
  type:'POST',
  url:'set_order.php',
  data:'delete_item='+item_id,
  beforeSend: function() {
        },
  success:function() {
    window.location.reload(true)
  }
});
...

打开set_order.php文件并处理此代码

if($_POST['delete_item']) {
$id = $_POST['delete_item'];
$sql = "DELETE from list_items where ID = $id";
$query = $pdo->prepare($sql);
$query->execute();
}

一切正常,但它根本没有保障:)如果用户检查页面并更改了&#34; id&#34;如图所示 enter image description here

点击&#34;删除&#34;按钮,将删除用户更改的ID项而不是原始ID。

检查数据的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

收到删除项目的请求后,请检查他们是否拥有该项目,如果没有,请不要将其删除。

if(isset($_POST['delete_item'])){
    if(userOwnsItem($_SESSION['id'], $_POST['delete_item']){
       // Valid request
    }else{
       // Invalid request
    }
}

其中$_SESSION['id']是用户的ID,函数userOwnsItem对项目执行查询,并检查所有者是否与用户具有相同的ID。

答案 1 :(得分:0)

首先,这不是AJAX,因为您重新加载页面。您应该根据响应和调用编辑DOM元素,而不是手动重新加载。事实上,如果你在php中执行DELETE选项,以正常方式执行它会更好更安全,只需重定向到某个页面,并且成功删除你重定向到某个地方或返回到同一页面。如果你想要一个真正的ajax请求并希望保护动作并阻止其他用户这样做,那么有很多方法和方法。您可以检查用户是否允许删除请求的ID,您可以授权某些用户能够执行此操作。最重要的是数据传输。您永远不应该让未加密的数据通过。所以你基本上应该这样做:

  1. 检查用户是否可以访问该功能和页面
  2. 检查用户是否拥有他想删除的内容
  3. 以一种不清楚它是什么的方式发送id - 很多功能都是在php手册中这样做的。最好的方法是使用你自己的2路算法 - 使用特殊词语(盐)加密/解密。

答案 2 :(得分:-1)

insert&#34; echo $ sql;&#34;在php结束测试你的SQL是正确的