在URL字符串中加密/编码ID

时间:2011-02-09 01:00:16

标签: php security encryption urlencode encode

只是尝试在我的网站上做一些安全措施,并试图找出确保身份证的最佳途径。

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

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

有关如何创建这样的内容的任何想法,或者是否存在适用于实现的内容?

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

3 个答案:

答案 0 :(得分:3)

隐藏ID是默默无闻,而不是安全。

如果你想要很好的默默无闻,请查看PHP中的mcrypt函数。确保在编码和解码之前附加一个盐,否则很容易猜到加密/解密。

请注意,其他任何人都可能会偶然发现您的网址,完全打败这些网址。如果你想要安全性,我也可以通过HTTPS使用某种形式的HTTP Auth。

答案 1 :(得分:2)

我的一位朋友实施了一种方法,用当前会话令牌和秘密签署所有GET请求以防止CSRF攻击。

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

您可以创建类似于原始网址的MD5哈希,并将其保存在数据库中。

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

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

答案 2 :(得分:1)

根据您是否需要它(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来执行相同的操作......