こんばんは!
今日はrailsのアプリケーションでセキュリティを上げるための方法を3つ紹介します。
1.before_action :authenticate_user!(会員側セキュリティ)
class XxxxController < ApplicationController
before_action :authenticate_user!
# 中略
end
各コントローラーの記述に加えてください。この記述を行うことで、ログインしていないとできない操作やページを作り、他人から情報を編集・削除されたり抜き取られることを防ぎます。userの部分はcustomerなどにも変更可能です。
2.before_action :authenticate_admin!(管理者セキュリティ)
class Admin::XxxxController < ApplicationController
before_action :authenticate_admin!
# 中略
end
こちらも管理者側の各コントローラ―に記述してください。この記述をすることで、adminとしてログインしていない場合は弾かれるようになり、URLを打ち込むだけでは管理者ページに入れなくなります。(そもそも管理者ページに顧客が入れてしまうことはアウトなので当然ですが...笑)
3.timeouttableを有効にする(devise導入が必要)
devise導入が前提ですが、timeouttableの記述をすることでログイン後のタイムアウトまでの時間を決めることができ、公共の場などでログアウトし忘れた画面を晒し続ける=情報を晒し続けることを防ぎます。時間はユーザーの使用時間とセキュリティを考慮しつつなるべく短く設定する方が良いです。方法は以下の通りです。
app/model/user.rbにtimeouttableを追記
deviseで導入したモデルにtimeouttableの記述を加えます。
class User < ActiveRecord::Base
devise :timeoutable
end
config/initializers/devise.rbのコメントアウトを外し時間を指定
# ==> Configuration for :timeoutable
# The time you want to timeout the user session without activity. After this
# time the user will be asked for credentials again. Default is 30 minutes.
# config.timeout_in = 30.minutes
config.timeout_in = 30.minutes # この部分をコメントアウト&時間指定
timeouttableのタイムアウト時間のデフォルトは30分ですが、変更することも可能です。
こちらの記事が参考になります。
最後に
チーム開発でセキュリティを考えたときにあまりにも自分が無知だったので、調べてまとめてみました。思ったより奥が深く、面白いなと感じたのでもう少し調べてみようかとおもいます。(まとまったら載せるかもしれないです。)
今回参考にさせていただいたサイトはこちら。