【问题标题】:Encrypt/Encoding an ID in URL string加密/编码 URL 字符串中的 ID
【发布时间】:2011-02-09 01:00:15
【问题描述】:

只是想在我的网站上做一些安全措施,并试图找出保护 ID 的最佳途径。

示例: http://localhost/page.php?id=90 至: http://localhost/share/22349234987sdsdf9sdf87423498asf9

我正在使用 HTACCESS 进行分享。但想隐藏“90”并试图阻止任何人只是添加随机数来尝试接收不同的响应。

对于如何创建这样的东西,或者是否已经存在可以很好地实施的东西有什么想法?

安全是一个因素,所以只是试图找到最好的解决方案......

【问题讨论】:

  • 怎么不呢?它显示了一个简单的 ID,任何人都可以更改...
  • @贾斯汀:那又怎样?您可以在此处更改id。有什么问题吗?

标签: php security encryption urlencode encode


【解决方案1】:

隐藏 ID 是模糊的,而不是安全的。

如果您想要更好的隐蔽性,请查看 PHP 中的 mcrypt 函数。编解码前一定要加一个盐,否则很容易猜到加解密。

请注意,其他人可能仍会偶然发现您的网址,从而完全击败了这一点。如果您也需要安全性,我会使用某种形式的 HTTP Auth over HTTPS。

【讨论】:

  • 是的,我已经通过 HTTPS 结构实现了这一点,为此我想知道如何以最佳方式“隐藏”ID。我将更多地研究 ID MCrypt。谢谢
【解决方案2】:

我的一个朋友实现了一种使用当前会话令牌和密钥对所有 GET 请求进行签名的方法,以防止 CSRF 攻击。

但是您要做的是拥有一个可以与其他人共享的 URL。

您可以创建一个类似于原始 url 的 MD5 哈希,并将两者保存在数据库中。

现在,当 /share/someLongId 打开时,您可以在数据库中检查该哈希属于哪个 URL,并可以将用户重定向到该 URL。

另一种可能性是首先使用 GUID 而不是自动递增的 ID。这样一来,所有的 ID 都会更长,而且不容易猜到。

【讨论】:

    【解决方案3】:

    根据您是否需要它(URL)持久化,您可以选择:

    非持久性:做这样的事情:

    function getLink($id) {
       $random = md5(uniqid());
       $_SESSION['links'][$random] = $id;
       return "http://localhost/share/$random";
    }
    echo getLink(10);
    

    然后:

    function getTrueId($id) {
      if(isset($_SESSION['links'][$id]) {
         return $_SESSION['links'][$id];
      } else {
         die("Unknown link!");
      }
    

    }

    这将使链接仅对当前会话中的当前用户可用。如果您需要它持久化,您可以生成随机 ID 并将它们与真实 ID 一起存储在数据库中,但这可能没有意义,因为可以使用随机 ID 代替真实 ID 来做同样的事情......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      相关资源
      最近更新 更多