要望や症状
EC-CUBE 4.2.0で会員パスワードの文字制限を変更したいという要望があります。
デフォルトの設定では、パスワードに以下の制限が適用されています。
現在の制限
- 小文字英字が必須
- 数字が必須
- 記号の一部が使用可能(-#.()~は可、&は不可)
- 英数字のみや英字のみ、数字のみでの登録はできない
この制限により、ユーザーがより簡単なパスワードを設定したい場合や、独自のパスワードポリシーを適用したい場合に対応できない状況が発生します。
理由や原因
EC-CUBE 4.2.0では、会員パスワードの文字制限が /app/config/eccube/packages/eccube.yaml の eccube_password_pattern パラメータで設定されています。
デフォルトの正規表現 '/\A(?=.*?[a-z])(?=.*?\d)[!-~]+\z/i' は以下の仕様となっています。
(?=.*?[a-z]): 小文字英字を1文字以上含む必要がある(?=.*?\d): 数字を1文字以上含む必要がある[!-~]+: ASCII文字の「!」から「~」までの範囲の文字を使用可能- 末尾の
iフラグにより大文字小文字を区別しない
この設定により、セキュリティを重視した複雑なパスワードが要求される仕様となっているため、より柔軟なパスワードポリシーを適用したい場合は設定の変更が必要です。
解決策
Customizeディレクトリでの設定変更
カスタム設定ファイルを作成してパスワードパターンを変更します。
1. カスタム設定ファイルの作成
app/Customize/Resource/config/services.yaml ファイルを作成し、以下の内容を記述します。
# app/Customize/Resource/config/services.yaml
parameters:
eccube_password_pattern: '/\A[0-9a-zA-Z]+\z/'
2. 設定の反映
キャッシュをクリアして設定を反映させます。
bin/console cache:clear
正規表現パターンの例
用途に応じて以下のパターンを参考にしてください。
英数字のみ(大文字小文字数字すべて許可)
eccube_password_pattern: '/\A[0-9a-zA-Z]+\z/'
英数字+一部記号のみ
eccube_password_pattern: '/\A[0-9a-zA-Z\-\.\(\)\~\#]+\z/'
最低文字数制限を追加(8文字以上)
eccube_password_pattern: '/\A[0-9a-zA-Z]{8,}\z/'
設定の確認
変更後は以下の手順で動作確認を行ってください。
- 会員登録画面でパスワード入力を行う
- 設定した正規表現に合致しないパスワードでバリデーションエラーが発生することを確認する
- 設定した正規表現に合致するパスワードで登録が成功することを確認する
注意事項
パスワードの文字制限を緩くするとセキュリティリスクが高まる可能性があります。特に英数字のみの制限にする場合は、最低文字数を長めに設定することを推奨します。また、本番環境での変更前には必ずテスト環境で動作確認を行ってください。