#課題
指定した箇所について、brakemanのMassAssignmentチェックをスキップしたい。
#詳細
brakemanのログを見ると、以下のようにWarningが出ている。
== Warnings ==
Confidence: Medium
Category: Mass Assignment
Check: PermitAttributes
Message: Potentially dangerous key allowed for mass assignment
Code: params.require(:user).permit(:role)
File: app/controllers/users_controller.rb
Line: 14
どうやら、以下のソースコードの「role」という単語に反応しているようだ。
users_controller.rb
private
def user_params
params.require(:user).permit(:role)
end
brakemanのソースコードを覗いてみると、
https://github.com/presidentbeef/brakeman/blob/aef6253a8b7bcb97116f2af1ed2a561a6ae35bd5/lib/brakeman/checks/check_permit_attributes.rb
roleがSUSPIOUS_KEYSとして登録されていた。
admin、account_idやroleなどのカラム名をpermitするのは危険だと定義しているらしい。
lib/brakeman/checks/check_permit_attributes.rb
require 'brakeman/checks/base_check'
class Brakeman::CheckPermitAttributes < Brakeman::BaseCheck
Brakeman::Checks.add self
@description = "Warn on potentially dangerous attributes allowed via permit"
SUSPICIOUS_KEYS = {
admin: :high,
account_id: :high,
role: :medium,
banned: :medium,
}
私としてはroleをpermitしたいので、このwarningチェックをスキップさせたい。
解決策
config/brakeman.ignore にスキップさせたい項目を定義できるようだ。
このファイルは以下のコマンドでスキップさせたい項目も定義しながら、作成できる。
bundle exec brakeman -I
以上で解決した。