普段アルバイト事業部で主にバックエンドの開発をしている@ayumu838です。 ところで皆さんは、自身のRailsプロジェクトに対してセキュリティチェックを行っていますか? ソースコードに対してSQLインジェクションやXSSなどの脆弱性がないかを解析してくれるGemです。 新規に導入するにあたり、以下の方針を立てました。 新規で導入するにあたり、最初は何箇所か検知されることが予想されます。 また、どこに問題があるかをすぐにわかるようにするために、reviewdogを使って、検知された箇所をアノテーションを使いPR内のコメントで表示するようにしました。 まずはGemfileに追加し、bundle installを実行します。 次に、GitHub Actionsの設定を行います。 reviewdogのbrakeman actionを参照して、以下のように設定します。 まずは、全てのファイルを検知し、CIを失敗扱いにしないようにします。 その次に、変更したファイルのみ検知を行い、CIを失敗扱いにするようにします。 最終的に全体の設定は以下のようになりました。 こちらの設定で実際に実行すると以下のようにPRのコメントが作成されます。
また自分の変更ではない箇所については、PRのFiles Changedの中の
※ ブログ用に開発者ツールでファイル名を変えています 業務後のチャットでセキュリティについて話をしてた時に、ふと思いついたので実際に導入してみました。はじめに
最近はStaubのホーロー鍋を買って煮込み料理をよく作って食べています。
食欲の秋なので日々のカロリー摂取量は増加の一途を辿っているのが少し心配です。
この記事では、GitHub Actionsを使ってRailsプロジェクトに対してBrakemanを導入して、セキュリティチェックを行った時の話です。Brakemanとは
人間が目視で確認していても抜け漏れがあったり、新たに報告された脆弱性に気付きにくかったりするので、こういった自動で検知してくれるツールを導入することにしました。導入方針
そのため、検知してもCIを失敗扱いにはせずにマージはできるようにしたいと考えました。
しかしこの方針だと、検知はされたものの、いつまでも修正されないまま放置されてしまう可能性があります。
そこで、変更したファイルについて検知された場合はCIを失敗扱いにするようにしました。導入方法
group :development, :test do
:
gem 'brakeman', require: false
:
end
その場合の設定は以下の通りです。- uses: reviewdog/action-brakeman@v2
with:
brakeman_version: gemfile # Gemfile.lockにあるバージョンを使う
filter_mode: nofilter # 全部のファイルを検知する
level: info
reporter: github-pr-review
fail_on_error: false # CIを失敗扱いにしない
- uses: reviewdog/action-brakeman@v2
with:
brakeman_version: gemfile
level: warning
filter_mode: file # 変更したファイルのみ検知する
reporter: github-pr-review
fail_on_error: true # CIを失敗扱いにする
brakeman:
permissions: # PRのコメントを書くため権限を付与する
contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ env.RUBY_VERSION }}
bundler-cache: true
- uses: reviewdog/action-brakeman@v2
with:
brakeman_version: gemfile
filter_mode: nofilter
level: info
reporter: github-pr-review
fail_on_error: false
- uses: reviewdog/action-brakeman@v2
with:
brakeman_version: gemfile
level: warning
filter_mode: file
reporter: github-pr-review
fail_on_error: true
Unchanged files with check annotations
に表示されます。終わりに
GitHub Actionsとreviewdogを使うことによって、PRのコメントに簡単に検知された箇所が表示されるようになるのは便利ですね。