(Yii において) メールアドレスの長さは 254 バイト以下で
メールアドレスのバリデーションの仕様に、 長さは 256 バイト以内であること、という仕様を入れていた。テスト時 256バイトのメールアドレスを入力したときに、なぜかエラーになる。そのときの設定は以下。問題ないはずなんだが。
<?php public function rules() { return array( array('mail', 'length', 'max' => 256, 'encoding' => false), array('mail', 'email'), ); }
どうも怪しいのは CEmailValidator。ソースを見てみると
strlen($value)<=254
となっている。254 がハードコーディング。
原因は Yii のバリデーターが 254 バイトまでしか許容していないから、だった。 今回の対応は、仕様を 254 バイト以内までに変更することで対応した。
もし、仕様が変更できない場合は、CEmailValidator を継承したクラスを作って、そのクラスを使用するようにすれば解決する。はず。
ソースのコメントには
// make sure string length is limited to avoid DOS attacks
と書いてあるけど、どうしてこれが DOS 攻撃対策になるのか分からない。256 バイトだとまずいのか?