ruby-on-rails - 在应用程序中混淆数字 ID 的最佳方法是什么

标签 ruby-on-rails

鉴于我有一个网站,其中大部分资源都有数字 ID(即 user.id question.id 等),但就像德国人回顾二战一样,我宁愿不向观察者透露这些,最好的方法是什么混淆他们?

我认为该方法将涉及 .to_param 和一些对称加密算法,但我不确定最有效的加密是什么以及它如何影响数据库中的查找时间等。

任何来自走过的道路的建议将不胜感激。

最佳答案

我发布了一个名为 obfuscate_id 的 Rails 插件。我不需要它是安全的,只是为了让 url 中的 id 对临时用户不明显。我还希望它看起来比长哈希更干净。

它还具有无需迁移或数据库更改的优点。这很简单。

只需将 gem 添加到您的 Gemfile :

gem 'obfuscate_id'

并在您的模型中添加调用混淆 ID:
class Post < ActiveRecord::Base
  obfuscate_id
end

这将创建这样的网址:
# post 7000
http://example.com/posts/5270192353
# post 7001
http://example.com/posts/7107163820
# post 7002
http://example.com/posts/3296163828

您也不需要以任何特殊方式查找记录,ActiveRecord find只是工作。
Post.find(params[:id])

更多信息在这里:

https://github.com/namick/obfuscate_id

关于ruby-on-rails - 在应用程序中混淆数字 ID 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6622594/

相关文章:

ruby-on-rails - 在Rails中缓存Twitter API调用

ruby-on-rails - 在模型方法中使用 Rails 中的当前用户

ruby-on-rails - 为什么这个局部变量声明不起作用?

mysql - Docker-Rails 无法连接 localhost mysql 数据库

ruby-on-rails - 如何在 Ruby 中忽略字符串中的所有引号和双引号?

ruby-on-rails - 设计无法检测到 :omniauthable, 但它在那里

ruby-on-rails - 模型名称包含 'cache'

ruby-on-rails - 设备升级后无法登录

ruby-on-rails - Vim ctags 当前目录和 gemset

ruby-on-rails - 来自 ruby​​ gem 的类上未初始化的常量