😈

【Brakeman】Railsで動的に生成される外部URLをリダイレクトさせたい

2024/03/23に公開

やりたいこと

  • タイトルの通り、動的に生成される外部URLをリダイレクトさせたい
  • 今回の場合は外部のヘルプページに飛ばしたい

問題

  • 以下のようなコードだと、BrakemanにSecurity Warnsと怒られる

    def show
        target_path = params[:target_path]
        url = "<https://example.com/#{target_path}>"
        redirect_to url, allow_other_host: true
    end
    
    

    ※ちなみにallow_other_host: trueは外部URLのリダイレクトを許容する設定

    Rails 7.0 アプリケーションのデフォルトでconfig.action_controller.raise_on_open_redirectsがtrueになっているため、リクエストと異なるドメインへのリダイレクトを許可しないようになっている

  • 以下のような静的な外部URLは上手くリダイレクトされること確認済み

    def show
        target_path = "faq"
        url = "<https://example.com/#{target_path}>"
        redirect_to url
    end
    
    

原因

  • どうやらBrakemanが、動的な値が含まれているURLは例外が発生させているみたい

The code above will raise an exception if params[:url] does not match the current domain.

https://brakemanscanner.org/docs/warning_types/redirect/

解決策

  • Brakemanのoptionsに記載がある通り、以下のコマンドで無視する処理を設定できるっぽい

    bundle exec brakeman -I

https://brakemanscanner.org/docs/options/ja.html?q=site:https://brakemanscanner.org&q=redirect_to

  • 基本的にこちらの記事に流れが記載されているので今回は割愛

https://qiita.com/mah_lab/items/dc09a457e549a9132d90

参考サイト

https://github.com/presidentbeef/brakeman

Discussion