【问题标题】:How can I hide user id in the url如何在 url 中隐藏用户 ID
【发布时间】:2021-11-05 15:54:07
【问题描述】:

如何使用 php 在 url 中隐藏用户 ID?

我有一个带有用户 ID 的按钮:

<a href="edit.php?id<?php echo $row['user_id']; ?><button>Edit</button></a>

如何隐藏或更好地加密它?

【问题讨论】:

  • 您为什么要这样做?通过默默无闻的安全性不是一个好主意
  • 虽然对我来说,隐藏用户 ID 并使简单的东西变得复杂对我来说是零意义。
  • @OMiShah 这样就不可能对页面发出GET 请求,这就是网络的工作方式。
  • 您是否尝试过搜索?我搜索了您的确切标题,并在 SO 上找到了很多很多答案,描述了不同的方法,并讨论了每种方法的各种优缺点。如果您的目标是防止某人仅仅为了查找用户而枚举 ID,您可以尝试使用哈希 - 以下是一些示例:stackoverflow.com/q/39297754/6089612stackoverflow.com/q/11788313/6089612stackoverflow.com/q/19914249/6089612stackoverflow.com/q/43746040/6089612
  • 如果用户更改了 ID,那么如果他们没有权限,您的代码应该阻止他们查看该 ID 的数据。与其试图隐藏事物,不如实施适当的安全措施。

标签: php


【解决方案1】:

使用 Flash 会话而不是 $_GET 参数 闪存会话一旦设置,读取会话时会自行销毁

例如在 laravel 中

return  redirect()->route('ffaa')->with('id',12);

这里 with 方法使用 flash session 将数据发送到另一个页面

【讨论】:

  • 究竟什么是“flash session”?
  • Flashmessages 是一种在页面 X 上设置(会话)变量并在新请求时立即将其删除的系统
  • 这个解决方案对于 OP 来说是不够的,因为显示的 url 是 edit.php 我想有不止一个用户记录
  • 你设置了flash session,你读了一次就消失了,就是这样,下次你想访问它时,它就不再存在了,所以页面之间发送数据就像用inter发送数据一样- android上的活动意图。您可以通过 google 搜索获得有关 flash 会话的信息。
  • 答案与 laravel 框架有关。但是用户已经使用 core php 提出了这个问题
【解决方案2】:

您可以在 href

中加密用户 ID
<?php $user_id = md5($row['user_id']); ?>
<a href="edit.php?id=<?php echo $user_id; ?>"><button>Edit</button></a>

edit.php 页面上 您可以使用相同的加密方法对其进行验证,例如:

<?php 
   $user_id = $_GET['id'];
   if($user_id === md5($row['user_id'])){
       // Code user id matches.
   }
?>

【讨论】:

  • md5 不是加密算法。此外,由于这是不可逆的,您需要从数据库中获取 所有 行以找到正确的行
  • @NicoHaase 你是对的,我只是给他一个提示。他可以使用其他任何东西,例如 openssl_encrypt()href 中对其进行加密,在 edit.php 上他可以使用 openssl_decrypt()
  • 那为什么不在你的回答中提到这种方法呢?
猜你喜欢
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 2021-01-06
  • 2013-04-19
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
相关资源
最近更新 更多