Fessのローカルユーザーのパスワードを設定するとき、入力欄で数えた文字数と、ハッシュ化に使うバイト数は一致するとは限りません。BCryptでは先頭72バイトが照合に使われるため、Fess 15.10に向けた開発版では、UTF-8で72バイトを超えるパスワードを設定時に拒否します。
文字数とバイト数の両方を確認する
password.min.length と password.max.length の初期値はそれぞれ8と100です。これらの長さ制限に加え、設定値を変えてもUTF-8で72バイトの上限が適用されます。ASCII文字だけなら1文字が1バイトです。UTF-8で3バイトになるひらがなだけなら、24文字で72バイト、25文字で75バイトになります。追加の文字種や禁止パスワードの条件を設定している場合は、そちらも満たす必要があります。
管理画面でのユーザー登録・パスワード変更、ログイン時に求められるパスワード変更、POST /api/v2/auth/password の入力検証が対象です。既存の長さエラーを使うため、画面にバイト上限が明記されないことがあります。長いパスフレーズで保存に失敗した場合は、文字数だけでなくバイト数も確認します。
既存ユーザーの切り替え
この変更で、保存済みのハッシュを再計算したり、既存ユーザーのログイン時に新しい長さ検証をしたりする処理は加わりません。以前に72バイトを超えるパスワードを設定した場合は、対応ビルドで上限内の新しいパスワードに変更し、再ログインで確認します。既存の長いパスワードを切り詰めると、BCryptで使われる接頭部分が同じになるので、新しい値を選びます。
関連PR
- パスワード設定時にUTF-8で72バイトを超える入力を拒否 Fess #3753