繁体   English   中英

解码 url $_GET 变量

[英]Decoding url $_GET variables

我搜索了一下,但仍在寻找一个好的解决方案。

我从我的数据库中获取“id”,然后在通过 URL 传递它之前通过 md5 散列函数对其进行编码。 在编辑页面中,我无法用我的数据库检查“id”(我得到表单 URL),因为“id”是 md5 编码的,但在数据库中有 int 值。 我发现md5无法解密。 那么我怎样才能找回我的ID呢? 或者有没有其他方法可以安全地做到这一点?

这就是我通过 url 传递数据的方式:

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

在编辑页面中,我得到了这样的“id”:

c4ca4238a0b923820dcc509a6f75849b

我想说,对于基本的方式,加密$_GET参数是没有意义的,它是可见的。 要么找到自己的加密方式,要么使用会话或 cookie。

我建议的一件简单的事情是:

  • 使用POST而不是GET
  • 一种不太安全的方法是base64_*函数。 见下文。

您可以使用base64_encodebase64_decode来执行此操作:

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

在文件中:

base64_decode($_GET["id"])

会给你取身份证。

我正在制作一个活动的注册页面。 它没有登录系统。 注册后,每位参与者将通过电子邮件获得一个链接(手动确认后),在那里他们可以找到参加活动所需的重要信息。 如果我不对 id 进行编码,那么任何用户都可以通过尝试随机“id”轻松访问其他用户信息。

那么你想要的是一个不可猜测的随机 id 任何使用 MD5 或 Base64主数据库 ID 进行简单编码的方案都不是不可猜测的,也不是随机的,乍一看就是这样。 但是 MD5 和 Base64 字符串由于它们的长度和/或格式而在某种程度上是可识别的,因此任何人如果知道您只是以这种方式编码数字这一事实将很乐意这样做并抓取您的所有链接。

不,您必须创建一个真正随机的id。 一个不基于其他任何东西的 id(比如一个简单的整数计数器),而是纯粹的随机胡说八道。 只有被告知这个随机值的人才能知道它,你不能简单地通过猜测得出这个随机值。 要做到这一点,随机值需要足够大以使猜测不可行(例如,您无法在合理的时间内进行数十亿次猜测)。

UUID非常适合于此,这是它的“官方”PHP 包,但您也可以找到其他 或者,获取一长串openssl_random_pseudo_bytesbin2hexbase64_encode

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM