在URL中加密$ _GET变量,以便用户无法访问其他配置文件

时间:2015-09-11 18:05:59

标签: php encryption

我希望能够通过电子邮件向我的客户发送指向其个人资料的链接。链接看起来像这样;

https://www.example.com/admin-area/files/edit_tenant.php?tenant_id=37

我不希望用户能够将'37'更改为'38'并编辑其他人的个人资料。

我想我需要以某种方式加密'37'。我已经在网上完成了我的研究,但我想我可能已经过度思考了,因为我已经开始遇到'盐'等等。

我正在使用PHP进行简单但安全的解决方案。

提前致谢。

4 个答案:

答案 0 :(得分:4)

在users表中定义“token”字段。当用户在您的系统中注册时,会产生随机字符串(比如说40个字符)并插入此令牌以及其他信息。因此,当你想要查找用户时,用他的令牌代替他/她,而不是id。通过这种方式,没有人可以猜到其他人的代币!

为了生成随机字符串,您可以使用以下函数:

function generateRandomString($length = 40) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[random_int(0, $charactersLength - 1)];
    }
    return $randomString;
}

注意:random_int()是PHP 7函数,但有一个polyfill available for PHP 5

答案 1 :(得分:0)

不允许进入(de)crement id这是正确的方法!您可以查看this页面。简而言之:您不必使用散列/混淆函数。相反,您可以生成单独的随机ID(例如UUID)。

答案 2 :(得分:-1)

我同意Mario这可能不是最好的想法,安全明智......但是如果你必须能够为用户提供这样的访问权限,那么你可以使用php哈希函数。根据userID + Email /其他标识符创建一个哈希值并将其保存到db ...然后将其用作userID =

哈希函数信息:http://php.net/manual/en/function.hash.php

答案 3 :(得分:-2)

你可以做的事情是:

  1. 创建电子邮件链接时,请使用简单的md5函数加密ID。
  2. $token = md5($tenant_id); // i.e.output: a5bfc9e07964f8dddeb95fc584cd965d

    1. 将“令牌”保存到该用户的数据库中(您可以添加名为token的列或类似内容)。

    2. 当用户使用tenant_id param转到配置文件时(我使用“token”或“t”来向可能的攻击者提供更少的信息),在新的db搜索中查找该值你添加的专栏。

    3. 完成,您无需了解有关加密的更多信息:)