在url中隐藏真正的数据库对象ID

Dan*_*nis 11 php mysql security hash url-rewriting

出于安全目的,在URL中隐藏真实数据库对象ID有哪些有用的解决方案?我发现其中一个解决方案是:

1)使用hashids开源项目

2)在创建对象时使用相同的旧md5来生成哈希并将其存储在数据库中,然后在url中使用它并通过它们查询,但缺点是通过自动递增的主键(ID)查询比哈希值.所以我相信哈希/ unhash的可能性会更好吗?

另外,正如我在Symfony上,是否有一些我无法找到或捆绑功能的捆绑包可以提供帮助?

请根据您的经验告诉我您认为有用的内容.

Sco*_*ski 13

这个问题已经被问了很多,用不同的单词选择(这使得很难说,"只是搜索它!").这个事实引发了一篇名为"PHP参考文献加密综合指南 "的博客文章.

人们想要做什么

某些加密函数用于确定性地检索ID

人们应该做些什么

使用单独的列

说明

通常,人们想要看起来随意的URL.这不允许您有足够的空间加密,然后验证您希望混淆的数据库记录ID.这样做的最小URL长度为32字节(对于HMAC-SHA256),在base64中编码时为44个字符.

一个更简单的策略是生成一个随机字符串(请参阅random_compat以获取PHP5实现random_bytes()random_int()生成这些字符串)并引用该列.

此外,简单的密码分析破坏哈希.他们的结论是:

我所描述的攻击明显优于强力攻击,因此从加密的角度来看,算法被认为是破坏的,很容易恢复盐; 使攻击者可以在任一方向上运行编码,并使属性2无效以获得理想的哈希函数.

不要依赖它.