1. ホーム
  2. ruby-on-rails

[解決済み] RoR 4のバリデーション付き正規表現

2023-06-23 12:45:26

質問

次のようなコードがあります。

class Product < ActiveRecord::Base
  validates :title, :description, :image_url, presence: true
  validates :price, numericality: {greater_than_or_equal_to: 0.01}
  validates :title, uniqueness: true
  validates :image_url, allow_blank: true, format: {
      with: %r{\.(gif|jpg|png)$}i,
      message: 'URL must point to GIT/JPG/PNG pictures'
  }
end

動作はするのですが、"rake test"を使ってテストしようとすると、このメッセージが表示されます。

rake aborted!
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?

どういうことですか?どうすれば直るのですか?

どのように解決するのですか?

^ そして $ はスタート 行の であり、末尾 行の というアンカーがあります。一方 \A\z はパーマネントスタート 文字列の と終了 の文字列 のアンカーを指定します。

違いを見てください。

string = "abcde\nzzzz"
# => "abcde\nzzzz"

/^abcde$/ === string
# => true

/\Aabcde\z/ === string
# => false

つまり、Railsはあなたに、"あなたは本当に ^$ ? を使いたくなりませんか? \A\z の代わりに、"。

この警告を発生させるrailsのセキュリティ上の懸念については、さらに多くのものがあります。 ここで .