我有以下代码片段,用于在给定主键的情况下从数据库中删除记录。这是通过GET通过AJAX请求调用的。任何检查我的JavaScript的人都可以计算出URL并删除任意记录。我该怎么做才能防止这种情况发生?
不使用GET?
使用会话?
if($cmd=="deleterec") {
$deleteQuery = "DELETE FROM AUCTIONS1 WHERE ARTICLE_NO = ?";
if ($delRecord = $con->prepare($deleteQuery)) {
$delRecord->bind_param("s", $pk);
$delRecord->execute();
$delRecord->close();
echo "true";
} else {
echo "false";
}
}
答案 0 :(得分:3)
不使用GET不会改变一件事。在进入代码中的这一点之前,您必须使用会话来管理“访问控制”。
也就是说,当发出AJAX请求时,您应该在此时通过会话确认允许发出请求的人在实际执行之前进行删除。
考虑如何以“非AJAX”的方式检查权限并在此处执行相同操作。
答案 1 :(得分:2)
您可以为记录提供非顺序随机唯一ID,以便在AJAX请求中使用。
虽然应该很容易集成到您当前的系统中,但仍然不是最安全的解决方案。
答案 2 :(得分:1)
答案 3 :(得分:1)
好吧,如果不是每个人都可以删除记录,请确保这个记录在密码后面,因此只有授权用户才能删除。让自己成为登录页面,然后在页面上添加“删除”按钮,并在PHP端确保用户在处理命令时获得授权。
哦,是的,请确保您始终通过POST传递确认值以验证,而不仅仅是GET参数,这是最佳做法,即使是授权用户也是如此。
答案 4 :(得分:1)
您的问题有两个重要方面。
授权用户是否应该能够删除他们认为合适的任何记录?如果是这种情况,那么您的问题就是确保请求来自授权用户。在这种情况下,使用PHP的会话是确保它是您进行身份验证的用户发出请求的一种方法。当然,使用所有技术,您必须确保以正确的方式使用PHP会话。关于这个问题,有很多文章。 PHPsec.org has one here
如果用户无法删除任何行,除了进行身份验证和会话之外,您还需要检查代码以验证是否可以删除该用户删除的记录。现在这高度依赖于您的应用程序。例如,在项目管理软件中,可以允许一个人删除与一个项目相关但不与另一个项目相关联的任务。这是您业务逻辑的一部分。
最好的方法是进行两项检查。第一,您的应用程序必须验证进行删除的用户是否是有效用户并且允许删除(使用php会话实现非常简单),并确保用户可以根据某种所有权形式删除特定记录。 / p>
答案 5 :(得分:0)
不要通过Ajax公开CRUD方法。
答案 6 :(得分:0)
如果用户已获得授权并允许删除,则必须在删除记录之前进行检查。