発生したエラー文
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?
背景
# 郵便番号の正規化
VALID_POSTAL_CODE_REGEX = /^\d{7}$/
validates :postal_code, presence: true,
format: { with: VALID_POSTAL_CODE_REGEX,
message: "is invalid format" }
こちらのコードがひっかかった。
原因
エラー文を読み解いていきます。
(^ or $), which may present a security risk
^と $ はセキュリティ的リスクを抱えているとのこと。
解決策
① \A and \zに置き換える
Did you mean to use \A and \z
といわれているので、
^を\A
$を\z
に置き換える。
② :multiline => true optionをつける
forgot to add the :multiline => true option?
もしくは、:multiline => true optionをつけると解決するようです。
最善策
しかし、②のやり方では、セキュリティリスクは解決しない模様。
^と $ の書き方は、直前の\nしか見てくれないため、例えば
me@example.com\n<script>dangerous_stuff();</script>
このような、テキストも入力を受け付けてしまうので注意。
https://stackoverflow.com/questions/577653/difference-between-a-z-and-in-ruby-regular-expressions
このように直しましょう。
# 郵便番号の正規化
VALID_POSTAL_CODE_REGEX = /\A\d{7}\z/
validates :postal_code, presence: true,
format: { with: VALID_POSTAL_CODE_REGEX,
message: "is invalid format" }
参考
Difference between \A \z and ^ $ in Ruby regular expressions
Rails4では正規表現が厳しくなった。
Railsの正規表現での^と$