gpt4 book ai didi

php - 在 url 中隐藏真实的数据库对象 ID

转载 作者:IT老高 更新时间:2023-10-29 00:21:26 25 4
gpt4 key购买 nike

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

1) 使用 hashids open source project

2) 在创建对象时使用类似旧 md5 的东西来生成哈希并将其存储在数据库中,然后在 url 中使用它并通过它们进行查询,但缺点是通过自动递增的主键 (ID) 进行查询比哈希更快。所以我相信散列/取消散列的可能性会更好?

此外,由于我使用的是 Symfony,是否有我找不到的捆绑软件或内置的有用功能?

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

最佳答案

这个问题已经被问过很多次了,用不同的词选择(这使得很难说,“只是搜索它!”)。这一事实促成了一篇题为 The Comprehensive Guide to URL Parameter Encryption in PHP 的博文。 .

人们想在这里做什么

Some encryption function is used to deterministically retrieve the ID

人们应该做什么

Use a separate column

说明

通常,人们想要简短 随机的 URL。这不允许您有太多空间来 encrypt then authenticate您希望混淆的数据库记录 ID。这样做需要至少 32 个字节的 URL 长度(对于 HMAC-SHA256),在以 base64 编码时为 44 个字符。

一个更简单的策略是生成一个随机字符串(参见 random_compatrandom_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com