php - 寻找有关如何处理面向公众的对象 ID 的建议

标签 php mysql

我需要帮助想出一个策略来处理我正在处理的 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/

相关文章:

java - 如何更改 JDBC 编码以支持法语重音字符

java - 当 id/uuid 存储为二进制时,如何使用 MyBatis 在插入后返回 key ?

php - WordPress MySQL数据检索 酒店订房预订系统

php - PHP中现有的类名冲突,需要一个创造性的解决方案

php - 如何查看 Ajax 传递给 PHP 的数据以及 PHP 使用数据 - 下拉菜单选项执行的操作

php - 如何在 Laravel 中使用 Eloquent 对 NULL 值进行最后排序

python - 构建 docker-compose 镜像时无法连接到 MySQL

PHP进度条?

MySQL 使用内连接更新现有值

MySQL 联合不是确定性的