gpt4 book ai didi

php - 安全 : Secure id in a url

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:58:02 24 4
gpt4 key购买 nike

我在编辑来自用户的帖子时使用以下网址:

../post/edit/3            //If the id of the post is 3 for example

为了避免用户故意修改 url,例如 /post/edit/5,我使用以下逻辑来确保用户在他不编辑帖子时不会编辑帖子有权限:

if (//user is allowed to edit post){
//edit post
}
else {
throw new AccessDeniedException('You do not have the permission to edit this post');
}

这是您编辑帖子时使用的一般方法吗?有没有办法做一些更干净的事情,以便用户无法使用 url 中的帖子 ID?

编辑

我越想越觉得我从来没有在关注安全的网站上看到这样的 url 中有 id。所以,我同意我们仍然可以使用 id 并检查用户是否可以显示/看到这个 id,但用户仍然可以做太多事情。对 ID 进行哈希处理不是更好吗,允许我们使用任何可用的算法生成新的加密 ID:

<?php
echo hash('md5', 'id_to_edit');
?>

在 url 中保护 id 的标准方法是什么?一般来说,在 url 中显示诸如 id 之类的信息是个好主意吗?

最佳答案

特殊情况可能需要特殊措施,但在典型情况下,所需要的只是:

  • 使用 SSL 使 session 不会被窃听者劫持
  • 在执行任何操作之前检查用户的权限。

很多网站都采用与您最初描述的方式类似的方式。例如,WordPress 的 URL 类似于 https://example.com/wp-admin/post.php?post=112&action=edit。显然,好奇的用户可以选择编辑 post=112 部分。

因此,您可能会考虑的一个标准是:“我是否需要比 WordPress 更关心安全和隐私?”

例如,如果您不希望查看日志文件的人知道哪些 IP 地址正在编辑哪些帖子,您有几个选择。每种方法都需要权衡取舍,因此最好的方法取决于您最关心的问题。

例如:

  • 您可以使用散列来隐藏帖子 ID 号,就像您在更新问题时建议的那样。
  • 或者您可能只是通过 SSL 通过 POST 方法(而不是 GET)发送该信息,而根本不将其包含在您的 URL 中。

第一种方法的一个优点是人们可以使用书签返回页面。你可能不想要那样。或者你可能会。取决于您的应用。

第二种方法的一个优点是(例如)Google Analytics(分析)不会显示一个帖子 ID 是否被反复访问/编辑,或者是否有多个帖子 ID 被访问/编辑。这对您来说可能很重要,具体取决于此类信息是否会告诉某人某些信息以及谁有权访问您的 Google Analytics(分析)资料。或者它可能根本不重要。

还有很多其他可能的考虑因素,例如性能。

顺便说一句,如果您确实使用 MD5,请确保在输入中包含攻击者不会知道的内容。否则,攻击者通过查找表反转发现的散列并为连续的帖子 ID 生成更多合法散列将是微不足道的。在 PHP 中,您需要执行以下操作:

hash('md5', $some_hard_to_guess_secret_string . $data_you_wish_to_hash);

没有适用于所有情况的单一最佳实践。但在典型情况下,不需要哈希 post id 值,甚至不需要通过 POST 发送。在典型情况下,请确保使用 SSL(这样 session 就不会被劫持)并在执行任何操作之前检查用户权限,这样您就可以开始了。

关于php - 安全 : Secure id in a url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11571195/

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