我正在使用 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);
}
我不想使用批准或取消批准或删除或垃圾邮件,而是想随机化或散列这些单词并希望它尽可能长,然后执行操作。
我该怎么做?你对此有什么看法?
编辑:请注意仅
经过身份验证的用户,即管理员将是
能够执行此操作。甚至
虽然通过了认证
系统我想增加更多的安全性
即使对于管理员来说也是如此。以避免实验
或意外
该代码并不准确,它只是一个示例,可以让您了解我想要实现的目标。
无论您在此处使用 GET 还是 POST 参数,在这种情况下都没有多大关系 - 脚本需要什么first是某种身份验证。 (完成之后,您可以进入安全详细信息,其中 GET 的安全性略低于 POST - 有关详细信息,请参阅注释。)
我想说你有两个选择:
重新编辑:
事实证明您的脚本已经受到保护。在这种情况下,我假设您对 URL 中出现的增量 ID 号、在浏览器中缓存等感到不舒服。通常的解决方案是在创建每个评论时为每个评论生成一个随机密钥(除了增量 ID)。该键存储在单独的列中(不要忘记添加索引),并且您可以与之匹配。
更进一步的是为每个操作创建临时哈希,这是抵御许多外部攻击的最终保护。
重新编辑有关使用一次性哈希的内容:
我从未在管理界面中实现过一次性哈希,所以我没有这方面的经验,但我想一个非常简单的实现会将操作哈希存储在一个单独的表中,其中包含列hash
, record
and action
。每当您的工具列出许多记录并输出“删除/批准/取消批准”链接时,它会在哈希表中为每个评论生成三个记录:一条用于删除,一条用于批准,一条用于取消批准。然后,“删除/批准/取消批准”链接将获取正确的哈希值作为唯一参数,而不是记录 ID 和命令。
为未使用的哈希值添加超时功能(加上删除实际使用的任何哈希值),然后就完成了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)