gpt4 book ai didi

php - 我如何使 $_GET 更安全。?

转载 作者:可可西里 更新时间:2023-11-01 00:37:53 24 4
gpt4 key购买 nike

我正在使用 get 方法为评论系统执行一些操作,如批准、标记垃圾邮件、删除。我知道走这条路很不安全,但我无能为力。因为使用 $_GET 方法的原因是使用 PHP_SELF 在页面本身内执行操作,仅供引用,我也使用使用复选框的 post 方法来执行操作。

现在为了让它有点安全,我想随机化数字或生成哈希或其他东西,然后比较它,获取 id 并执行操作

我现在的代码有点像这样。

<?php 
if($approve == 1 )
{
?>
<a href="<?php echo $_SERVER['PHP_SELF']."?approve=".$id; ?>">Unapprove</a>
<?php
} else
{
?>
<a href="<?php echo $_SERVER['PHP_SELF']."?unapprove=".$id; ?>">Approve</a>
<?php
}
?>
| <a href="<?php echo $_SERVER['PHP_SELF']."?spam=".$id; ?>">Spam</a>
| <a class="edit-comments" href="edit-comments.php?id=<?php echo $id; ?>">Edit</a>
| <a href="<?php echo $_SERVER['PHP_SELF']."?delete=".$id; ?>">Delete</a>

然后我使用这段代码执行操作..

if(isset($_GET['approve'])) {
$id = intval($_GET['approve']);
$query = "UPDATE comments SET approve = '0' WHERE id = '$id'";
$result = mysql_query($query);
}

if(isset($_GET['unapprove'])) {
$id = intval($_GET['unapprove']);
$query = "UPDATE comments SET approve = '1' WHERE id = '$id'";
$result = mysql_query($query);
}

if(isset($_GET['delete'])) {
$id = intval($_GET['delete']);
$query = "DELETE FROM comments WHERE id = '$id'";
$result = mysql_query($query);
}

if(isset($_GET['spam'])) {
$id = intval($_GET['spam']);
$query = "UPDATE comments SET spam = '1' WHERE id = '$id'";
$result = mysql_query($query);
}

而不是使用批准或取消批准或删除或垃圾邮件,我想随机化或散列这些词并希望它尽可能长,然后执行操作。

我该怎么做?您对此有何看法?

EDIT: Please Note Only the Authenticated User i.e Admin will be able to perform this operation. even though it pass through authentication system i want to add more security even for admin. to avoid experiments or accident

代码并不准确,它只是让您了解我想要实现的目标的示例。

最佳答案

在这种情况下,您在这里使用 GET 还是 POST 参数并不重要 - 脚本首先需要的是某种身份验证。 (完成后,您可以进入安全细节,其中 GET 的安全性略低于 POST - 有关详细信息,请参阅评论。)

我会说你有两个选择:

  • 使用 .htaccess 保护整个脚本 - 无需对脚本本身进行任何更改

  • 引入 PHP 端用户身份验证,仅当登录用户发出请求时才执行操作。需要对脚本进行根本性更改,但最灵活。

重新编辑:

原来你的脚本已经被保护了。在那种情况下,我假设您对在 URL 中出现增量 ID 号、在浏览器中缓存等等感到不舒服。通常的解决方案是在创建每个评论时为每个评论生成一个随 secret 钥(除了增量 ID)。该键存储在单独的列中(不要忘记添加索引),您将与之匹配。

更进一步的步骤是为每个操作创建临时哈希,这是抵御许多外部攻击的最终保护。

修改您关于使用一次性哈希的修改:

我从来没有在管理界面中实现一次性哈希,所以我没有这方面的经验,但我想一个非常简单的实现会将操作哈希存储在一个单独的表中,其中包含列 hash , recordaction .每当您的工具列出许多记录并输出“删除/批准/取消批准”链接时,它会在哈希表中为每条评论生成三条记录:一条用于删除,一条用于批准,一条用于取消批准。然后,“删除/批准/取消批准”链接将获得正确的散列作为唯一参数,而不是记录 ID 和命令。

为未使用的哈希添加一个超时函数(加上删除任何实际使用的哈希),您就完成了。

关于php - 我如何使 $_GET 更安全。?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3682480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com