Rails4.0.0beta1になってからvalidatesのformatも厳しくなった

セキュリティ的にも堅固になったと聞いてたんですが、Rails3.2.8→Rails.4.0.0.beta1のアップデートすると下記のエラーがでるようになった。

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?

なんだーと思って該当箇所をみてみると、

validates_format_of :name, :with => /^[0-9A-Za-z]*$/, :message => "は半角英数字のみ入力できます。"

こんな記述が。。。
^と$は複数行に対応してないから危険だよと。

Difference between \A \Z and ^ $ in Ruby on Rails regular expressions – Stack Overflow

ここに書いてあるんですが、これだと

me@example.com\n<script>dangerous_stuff();</script>

こんなinputは受け付けちゃんですよね。
$だと\nの直前までしか見ないと。だから\nも含めた\Zを使いましょうという事です。
同様に^も\Aを使いましょうと。

もちろん許可することも出来て、その際は :multiline => ture を記述しましょうね。

ということですね。

strong_parametersもそうですが、セキュリティ的にはがちがちになってきてますねぇ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>