我搜索了一下,但仍在寻找一个好的解决方案。
我得到了' 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
答案 0 :(得分:4)
我想说,就基本方式而言,加密$_GET
参数是没有意义的,这是可见的。要么找到自己的加密方式,要么使用会话或cookie。
我建议的一件容易的事情是:
POST
代替GET
。base64_*
功能。见下文。您可以使用base64_encode
和base64_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_bytes
和bin2hex
或base64_encode
。