解码url $ _GET变量

时间:2015-10-19 12:44:25

标签: php html mysql

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

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

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

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

在编辑页面中,我得到了&#39; id&#39;像这样:

c4ca4238a0b923820dcc509a6f75849b

2 个答案:

答案 0 :(得分:4)

我想说,就基本方式而言,加密$_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"])

将获取您的身份证。

答案 1 :(得分:0)

  

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

你想要的是一个不可思议的随机id 。使用MD5或Base64简单地编码您的主数据库ID的任何方案既不是 unguessable 也不是 random ,它只是乍一看。但是MD5和Base64字符串由于它们的长度和/或格式而在某种程度上是可识别的,所以任何人都可以通过这种方式来编写一个数字,这样就很乐意做同样的事情并抓取你所有的链接。

不,您必须创建一个真正的 随机 ID。一个不基于任何其他内容的id(如简单的整数计数器),但纯粹是随意的废话。只有被告知这个随机值的人才能知道,你不能仅仅通过猜测就达到这个随机值。要做到这一点,随机值必须足够大才能使猜测变得不可行(例如,你无法在合理的时间内做出几十亿的猜测)。

UUIDs非常适合这种情况,here's the "official" PHP package适用于此,但您也可以找到其他人。或者,获取一长串openssl_random_pseudo_bytesbin2hexbase64_encode