前提
Rubyのバージョンは6.0.0
railsのバージョンは6.0.3.4
上記の環境でエラーは発生しました。
エラー内容
The provided regular expression is using multiline anchors (^ or $), which may present a security risk. Did you mean to use \A and \z, or forgot to add the :multiline => true option? (ArgumentError)
どうやら「^」や「$」はセキュリティ上のリスクがあるということでエラーが出ているようです。
解決した方法
エラー文にしたがって ^→\A, $→\z のように変更すると解決しました!
エラーに関しての詳細
調べてみたところRailsの4.0以降のバージョンでは上記エラーが出るようになったようです。
日々セキュリティが向上しているんですね!
「^」や「$」がリスクがある理由としては
「^」→行頭
「$」→行末
であるため、複数行を渡された時に予期せぬ値の許容が起きてしまうから。
そのため
「/A」→文字列の先頭
「/z]→文字列の末尾
に変更すると各文字列ごとに読み込むため、複数行渡されても大丈夫なので「/A」「/z」を使ってくださいね!
という指示が出てきた、というエラーでした。
ちなみに「:multiline => true」オプションを使えば「^」や「$」も使えるようなので、複数行を渡すことが前提であればこのオプションを使う解決方法の方がいいのかもしれませんね。