【发布时间】:2018-05-18 08:04:49
【问题描述】:
保护 GET 请求的最佳方法是什么,或者有什么更安全的替代方法?
我在我的网站中使用了几个 GET 请求来动态生成网页并根据 ID 删除记录。
最后一个让我有点担心,因为人们可以将 URL 更改为他们想要删除的任何文件。
要访问删除文件,他们需要登录并拥有一定的权限,如果他们没有足够的权限,则会抛出错误。
我遇到了a really old SO post,说您应该使用mysqli_real_escape_string 函数来使其至少更加安全。
我还了解到验证非常重要,因此我在考虑检查 ID 是否为实际整数。
There's another post 表示将请求隐藏在 URL 中基本上是没有用的,因为请求将始终是 URL 的一部分。
这是我的删除文件,它使用两个语句,一个删除实际帖子,另一个删除与该帖子相关的图像。
include('./utils/auth.php');
require('./utils/db.php');
$stmt_1 = $connect->prepare('DELETE FROM `dias` WHERE diaserie_id = ?');
if($stmt_1) {
$id = $_GET['id'];
$stmt_1->bind_param('i', $id);
if($stmt_1->execute()) {
// Als de afbeeldingen uit de database zijn, verwijder dan ook de serie zelf
$stmt_2 = $connect->prepare('DELETE FROM `diaseries` WHERE diaserie_id = ?');
if($stmt_2) {
$stmt_2->bind_param('i', $id);
if($stmt_2->execute()) {
echo "Both the files and post have been deleted.";
} else {
echo "The files have been deleted, the post iself could not be deleted.";
}
}
} else {
echo "Files and post could not be deleted.";
}
}
【问题讨论】:
-
首先,如果允许用户删除文件,您可以为用户添加权限。如果授予权限,则在删除文件之前,您必须首先获取具有给定 id 的文件并检查经过身份验证的用户是否拥有该文件..
-
您包含
auth.php,这似乎暗示您需要某人登录才能执行该操作?您是否还检查登录用户是否有权删除他们请求的特定文件?$_GET本质上并不比其他方法安全,除了它在浏览器栏上可见,因此站在你后面的人可以阅读它。 -
“安全”以什么方式?那么不允许删除某些内容的用户不能删除某些内容吗?这要求服务器在删除之前检查该权限,简单明了(无论您的标准是什么,我们都不知道)。此外,不要使用 GET 请求来删除(或通常修改任何状态)。可以使用 URL 查询参数(
$_GET),但 HTTP 请求方法必须是 POST(实际上是 DELETE)。否则,Google 只会通过抓取来清空您的网站(如果您还缺少权限检查……)。 -
@deceze 你有我可以阅读的关于删除请求的网站链接吗?
-
en.wikipedia.org/wiki/… - 但在浏览器中,只有 GET 和 POST 可以从普通表单中使用;其他任何你需要 Javascript 的东西。
标签: php security get sql-injection