如何保护我的delete.php文件
$id = (int) $_GET['id'];
$delete = $connection->prepare("DELETE FROM `articles` WHERE `id` = :id");
$delete->execute(['id' => $id]);
if($delete->rowCount() > 0){
echo 'SUCCESS';
}else{
echo 'ERROR';
}
让我们说我登录了我的网站panal,我的会话在
$_SESSION['user_id'] = My_ID;
当我登录时,一些黑客在我的电子邮件中发送了一个链接
<img src="http://my.website.com/panel/articles/delete.php?id=353">
该链接将删除我的文章或最糟糕的网站的完整主要部分,这是非常危险的。那么如何保护我的删除链接
答案 0 :(得分:4)
这是一个很好的例子,为什么在HTTP RFC中说明,GET方法只应用于请求数据,而{/ 3}}方法应该使用。
为了保护POST表格免受此类欺诈,必须使用通常的CSRF保护。简而言之,每个表单都应使用秘密令牌进行签名,并存储在会话中。因此,网站将能够验证表单是否由引擎发出。
可以在此处找到一个示例,for the data manipulation it's POST
答案 1 :(得分:1)
您可以建立两步确认表格
当用户访问articles / delete.php?id = 353时,你只需计算一些哈希'qweadasdasdqw'并提供链接就像这篇文章/ delete.php?id = 353&amp; hash = qweadasdasdqw
只需构建一些问题'你真的想要删除文章吗?'
按钮'是'将为用户提供url文章/ delete.php?id = 353&amp; hash = qweadasdasdqw,
按钮'no'将为用户提供文章列表。
所以如果哈希是正确的,你将删除这篇文章
查看代码
$hash = isset($_GET['hash']) ? $_GET['hash'] : null;
$id = (int) $_GET['id'];
if (isset($hash) && (md5($id) == $hash)) { // Check hash
$delete = $connection->prepare("DELETE FROM `users` WHERE `id` = :id");
$delete->execute(['id' => $id]);
if($delete->rowCount() > 0){
echo 'SUCCESS';
}else{
echo 'ERROR';
}
} else {
$hash = md5($id); // Generate hash todo use more security function
echo 'Do you really want to delete this article? <a href="http://my.website.com/panel/articles/delete.php?id=' . $id . '&hash=' . $hash .'">yes</a>';
}
答案 2 :(得分:0)
你可以做几件事,
使用post方法进行数据操作而不是get。
您还可以使用代币,确保再生代币
请勿检查用户是否已登录,还要确保登录用户有权删除/更新该记录。