我需要帮助想出一个策略来处理我正在处理的 PHP/MySQL 应用程序中的对象 ID。基本上,URL 不是这样的:
/post/get/1
我正在寻找类似的东西:
/post/get/92Dga93jh
我知道通过模糊实现安全是没有用的(我有一个 ACL 系统来处理安全问题)但我仍然需要隐藏 ID。这就是我被困的地方。
我考虑过为每个数据库行生成一个单独的公共(public) ID,但一直无法找到创建真正唯一 ID 的方法。
我想我可以在 MySQL 自动递增行 ID 离开和进入我的应用程序时对其进行加密和解密,但我不确定 PHP 的加密和解密方法有多“昂贵”。此外,我需要确保隐藏的 ID 保持唯一性,这样它就不会解密为错误的值。
此外,由于我的域对象彼此相关,如果我决定在表中生成和存储一个模糊的 ID,我想避免对 MySQL 造成任何不必要的压力。
我正在用头撞墙,因为我觉得这是一种常见的情况,但不知道该怎么做。非常感谢任何帮助!
最佳答案
我只使用加盐的 md5。对于 99% 的情况,它是安全的。另外 1% 是当您用头撞墙时,因为您的数据被黑客窃取了,因此将其影响降至最低变得至关重要。
所以:
$sql = 'SELECT * FROM my_table WHERE MD5(CONCAT(ID, "mysupersalt")) = "'.$my_checked_url_value.'"';
并且可以使用类似的策略从 PHP 生成相同的东西:
<a href="/link/to/mypage/<?php echo md5($id.'mysupersalt'); ?>"> link text </a>
希望这就是您要找的..
关于php - 寻找有关如何处理面向公众的对象 ID 的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8917739/