【发布时间】:2017-08-15 04:48:25
【问题描述】:
我的 PHP 生锈了。我有一个 md5 哈希,它通过 get 传递给脚本,然后我像这样抓取它:
$id = $_GET['id'];
显然这里存在安全风险...我正在考虑检查字符串长度以确保其长度为 32 个字符,但这对我来说似乎不是很可靠。我还能做些什么来使它更安全?
谢谢
【问题讨论】:
-
为什么要通过 get 传递哈希?如果没有更多信息,我猜你这样做的方式根本不安全。
-
你拿到
$id之后做什么? -
是否存在安全风险主要取决于您之后对变量的处理方式。
-
这是电子邮件中的一个链接。用户单击它并被定向到一个页面,该哈希用于验证它们...调用数据库以查看是否有记录里面有那个哈希ID..如果有那么他们被允许更新他们的详细信息......正如我所说我的php生锈了但许多网站似乎都使用这种方法?
-
MD5 哈希可以有 16^32 个可能的值,因此只要用于生成哈希的输入数据是不可猜测的,它对于唯一链接就足够了。例如,对于密码更改请求(当用户忘记密码时),使用
md5($userID . $userEmail . $_SERVER['REQUEST_TIME'])就足够了,因为完全不可能猜测何时(request_time)以及哪个用户(用户 ID、电子邮件)要求更改密码。哈希本身也很难猜测,因为它可以有大量可能的值。
标签: php