🕵️
Railsでidをハッシュにして推測できないようにする
rails で model の id を露出させたくないときには、hashid-rails という gem を使うと便利です。
指定した id を一意の短いハッシュに変換してくれます。
使い方
インストール
Gemfile
gem "hashid-rails", "~> 1.0"
$ bundle install
設定する
今回は url がroot/users/:id
になっているUsers#show
に hashid-rails を設定します。
hashid-rails を使いたい model にinclude Hashid::Rails
を記述します。
user.rb
class User < ApplicationRecord
include Hashid::Rails
end
controller では find で user を取得しています。これは hashid-rails は関係なく、一般的なコードだと思います。
users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
end
hashid-rails を適用する前・後を比較すると、
id が 1
-> b9YtZb
,
URL だと、http://localhost:3000/users/1
-> http://localhost:3000/users/b9YtZb
になりました。
なお、DB に保存されている id をハッシュに書き替えることはありません。
メリット・デメリット
メリット
- id を露出させたくないときに便利(url に入っている id から他のデータの存在を推測できないようにしたいなど)
- 設定が簡単
- DB の id は数字のままなので、途中から hashid-rails を追加したり削除することも簡単。
デメリット
- 調査・お問い合わせ対応などでデータを特定したいときに ハッシュ id だと データを特定するときに不便。
Discussion