- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在编辑来自用户的帖子时使用以下网址:
../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 之类的信息是个好主意吗?
最佳答案
特殊情况可能需要特殊措施,但在典型情况下,所需要的只是:
很多网站都采用与您最初描述的方式类似的方式。例如,WordPress 的 URL 类似于 https://example.com/wp-admin/post.php?post=112&action=edit
。显然,好奇的用户可以选择编辑 post=112
部分。
因此,您可能会考虑的一个标准是:“我是否需要比 WordPress 更关心安全和隐私?”
例如,如果您不希望查看日志文件的人知道哪些 IP 地址正在编辑哪些帖子,您有几个选择。每种方法都需要权衡取舍,因此最好的方法取决于您最关心的问题。
例如:
第一种方法的一个优点是人们可以使用书签返回页面。你可能不想要那样。或者你可能会。取决于您的应用。
第二种方法的一个优点是(例如)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/
我是一名优秀的程序员,十分优秀!