LoginSignup
77
79

More than 5 years have passed since last update.

RailsのDeviseで最低限付与したいセキュリティ設定

Posted at

Railsで会員機能を実装するのによく使うgemのDeviseですが、
個人的にサービス作るなら最低限これくらいの設定はしておいて欲しいなぁと思う。
簡単に設定できて手軽にセキュリティレベル上げれるので、
可用性が下がらない範囲で調整して導入して欲しいです。

ロック条件の有効化(時間でのみ解除の場合)

deviseのマイグレーションファイルのコメント部分を調整します。
コメントに使用方法なども書いているので、
要件に合わせて使い分けるのが良いでしょう。
今回は時間でのみ解除するので下記のようにしておきます。
※メールで解除用のトークン送ったりする場合トークン部分もいります。

db/migrate/20150416180122_devise_create_users.rb
      ## Lockable
      t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
      # t.string   :unlock_token # Only if unlock strategy is :email or :both
      t.datetime :locked_at

    # add_index :users, :unlock_token,         unique: true

User(該当モデル)に devise:lockable を追加します。

app/models/user.rb
class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :lockable
end

ロック条件の詳細設定

Deviseの設定ファイルにロック内容を設定します。
設定方法の詳細(パターン)はコメントアウトされてるので読んだら大体分かります。

config/initializers/devise.rb
config.lock_strategy = :failed_attempts # 一定回数ログインミスでロック
config.unlock_strategy = :time          # ロック解除条件は時間経過のみ
config.maximum_attempts = 10            # 10回連続ミスでロック
config.unlock_in = 1.hour               # 1時間ロック継続
config.last_attempt_warning = false    # あと1回ミスしてロックされる時に警告を出さない

ね、簡単でしょ?

77
79
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
77
79