首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找有关如何处理面向公众的对象ids的建议

寻找有关如何处理面向公众的对象ids的建议
EN

Stack Overflow用户
提问于 2012-01-19 05:30:44
回答 5查看 92关注 0票数 0

我需要帮助来想出一个策略来处理我正在开发的PHP/MySQL应用程序中的对象in。基本上,不是像这样有一个URL:

代码语言:javascript
复制
/post/get/1

我正在寻找类似这样的东西:

代码语言:javascript
复制
/post/get/92Dga93jh

我知道模糊安全是无用的(我有一个ACL系统来处理安全问题),但我仍然需要隐藏in。这就是我被卡住的地方。

我考虑过为每个DB行生成一个单独的公共id,但一直无法找到创建真正唯一的id的方法。

我想我可以在MySQL自动增量行id离开和进入我的应用程序时对其进行加密和解密,但我不确定PHP的加密和解密方法有多“昂贵”。此外,我需要确保模糊的id保持唯一,这样它就不会解密为错误的值。

此外,由于我的域对象是相互关联的,所以如果我决定在表中生成并存储一个模糊的id,我希望避免给MySQL带来任何不必要的压力。

我的头撞到了墙上,因为我觉得这是一个常见的场景,但又不知道该怎么办。任何帮助都是非常感谢的!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-19 05:38:33

我只会用加盐的md5。它对99%的病例都是安全的。另外1%是当你因为你的数据被亲黑客窃取而使你的头在墙上摇晃的时候,将其影响降到最低变得至关重要。

所以:

代码语言:javascript
复制
$sql = 'SELECT * FROM my_table WHERE MD5(CONCAT(ID, "mysupersalt")) = "'.$my_checked_url_value.'"';

并且可以使用类似的策略从PHP生成相同的内容:

代码语言:javascript
复制
<a href="/link/to/mypage/<?php echo md5($id.'mysupersalt'); ?>"> link text </a>

希望这就是你要找的..

票数 1
EN

Stack Overflow用户

发布于 2012-01-19 05:34:02

只要你给出了9个字符的base62字符串-你可以遵循这个策略:

  1. 生成一个从1到13537086546263552的数字(62^9)
  2. 将其转换为base62字符串
  3. 尝试插入到数据库中(您应该拥有id字段上的唯一索引)
  4. If ok -什么都不做

<代码>H19如果不是,请重复1-3

票数 1
EN

Stack Overflow用户

发布于 2012-01-19 05:34:10

使用单向散列,如md5等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8917739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档