出于安全目的,在 URL 中隐藏真实数据库对象 ID 的有用解决方案是什么?我发现其中一种解决方案是:
1) 使用 hashids open source project
2) 在创建对象时使用类似旧 md5 的东西来生成哈希并将其存储在数据库中,然后在 url 中使用它并通过它们进行查询,但缺点是通过自动递增的主键 (ID) 进行查询比哈希更快。所以我相信散列/取消散列的可能性会更好?
此外,由于我使用的是 Symfony,是否有我找不到的捆绑软件或内置的有用功能?
请根据您的经验告诉我您认为有用的内容。
最佳答案
这个问题已经被问过很多次了,用不同的词选择(这使得很难说,“只是搜索它!”)。这一事实促成了一篇题为 The Comprehensive Guide to URL Parameter Encryption in PHP 的博文。 .
人们想在这里做什么
人们应该做什么
说明
通常,人们想要简短 随机的 URL。这不允许您有太多空间来 encrypt then authenticate您希望混淆的数据库记录 ID。这样做需要至少 32 个字节的 URL 长度(对于 HMAC-SHA256),在以 base64 编码时为 44 个字符。
一个更简单的策略是生成一个随机字符串(参见 random_compat 的 random_bytes()
和 random_int()
生成这些字符串的 PHP5 实现)和引用该列代替。
此外,hashids are broken通过简单的密码分析。他们的结论是:
The attack I have described is significantly better than a brute force attack, so from a cryptographic stand point the algorithm is considered to be broken, it is quite easy to recover the salt; making it possible for an attacker to run the encoding in either direction and invalidates property 2 for an ideal hash function.
不要依赖它。
关于php - 在 url 中隐藏真实的数据库对象 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32795998/