(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 バイトだとまずいのか?