feat(security): 비밀번호 정책 강화 — 8자+영문·숫자·특수 3종 + 안내문구
- 회원가입·비밀번호 변경·관리자 회원 등록/수정에 정책 적용 - 정규식 규칙을 배열 형식으로 적용(파이프 파싱 깨짐 → is_unique 등 검증 무력화 버그 수정) - 비밀번호 입력란에 형식 안내문구 추가 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -19,14 +19,15 @@ class PasswordChange extends BaseController
|
||||
helper('admin');
|
||||
$rules = [
|
||||
'current_password' => 'required',
|
||||
'new_password' => 'required|min_length[4]|max_length[255]',
|
||||
'new_password' => ['required', 'min_length[8]', 'max_length[255]', 'regex_match[/^(?=.*[A-Za-z])(?=.*\d)(?=.*[\W_]).+$/]'],
|
||||
'new_password_confirm' => 'required|matches[new_password]',
|
||||
];
|
||||
$messages = [
|
||||
'current_password' => ['required' => '현재 비밀번호를 입력해 주세요.'],
|
||||
'new_password' => [
|
||||
'required' => '새 비밀번호를 입력해 주세요.',
|
||||
'min_length' => '비밀번호는 4자 이상이어야 합니다.',
|
||||
'required' => '새 비밀번호를 입력해 주세요.',
|
||||
'min_length' => '비밀번호는 8자 이상이어야 합니다.',
|
||||
'regex_match' => '비밀번호는 영문·숫자·특수문자를 모두 포함해야 합니다.',
|
||||
],
|
||||
'new_password_confirm' => [
|
||||
'required' => '비밀번호 확인을 입력해 주세요.',
|
||||
|
||||
@@ -83,13 +83,13 @@ class User extends BaseController
|
||||
{
|
||||
$rules = [
|
||||
'mb_id' => 'required|min_length[2]|max_length[50]|is_unique[member.mb_id]',
|
||||
'mb_passwd' => 'required|min_length[4]|max_length[255]',
|
||||
'mb_passwd' => ['required', 'min_length[8]', 'max_length[255]', 'regex_match[/^(?=.*[A-Za-z])(?=.*\d)(?=.*[\W_]).+$/]'],
|
||||
'mb_name' => 'required|max_length[50]',
|
||||
'mb_email' => 'permit_empty|valid_email|max_length[100]',
|
||||
'mb_phone' => 'permit_empty|max_length[20]',
|
||||
'mb_level' => 'required',
|
||||
];
|
||||
if (! $this->validate($rules)) {
|
||||
if (! $this->validate($rules, ['mb_passwd' => ['min_length' => '비밀번호는 8자 이상이어야 합니다.', 'regex_match' => '비밀번호는 영문·숫자·특수문자를 모두 포함해야 합니다.']])) {
|
||||
return redirect()->back()->withInput()->with('errors', $this->validator->getErrors());
|
||||
}
|
||||
$allowedLevels = array_keys($this->getAssignableLevels());
|
||||
@@ -154,9 +154,9 @@ class User extends BaseController
|
||||
];
|
||||
$passwd = $this->request->getPost('mb_passwd');
|
||||
if ($passwd !== '') {
|
||||
$rules['mb_passwd'] = 'min_length[4]|max_length[255]';
|
||||
$rules['mb_passwd'] = ['min_length[8]', 'max_length[255]', 'regex_match[/^(?=.*[A-Za-z])(?=.*\d)(?=.*[\W_]).+$/]'];
|
||||
}
|
||||
if (! $this->validate($rules)) {
|
||||
if (! $this->validate($rules, ['mb_passwd' => ['min_length' => '비밀번호는 8자 이상이어야 합니다.', 'regex_match' => '비밀번호는 영문·숫자·특수문자를 모두 포함해야 합니다.']])) {
|
||||
return redirect()->back()->withInput()->with('errors', $this->validator->getErrors());
|
||||
}
|
||||
$allowedLevels = array_keys($this->getAssignableLevels());
|
||||
|
||||
@@ -357,7 +357,7 @@ class Auth extends BaseController
|
||||
{
|
||||
$rules = [
|
||||
'mb_id' => 'required|min_length[4]|max_length[50]|is_unique[member.mb_id]',
|
||||
'mb_passwd' => 'required|min_length[4]|max_length[255]',
|
||||
'mb_passwd' => ['required', 'min_length[8]', 'max_length[255]', 'regex_match[/^(?=.*[A-Za-z])(?=.*\d)(?=.*[\W_]).+$/]'],
|
||||
'mb_passwd_confirm' => 'required|matches[mb_passwd]',
|
||||
'mb_name' => 'required|max_length[100]',
|
||||
'mb_email' => 'permit_empty|valid_email|max_length[100]',
|
||||
@@ -374,9 +374,10 @@ class Auth extends BaseController
|
||||
'is_unique' => '이미 사용 중인 아이디입니다.',
|
||||
],
|
||||
'mb_passwd' => [
|
||||
'required' => '비밀번호를 입력해 주세요.',
|
||||
'min_length' => '비밀번호는 4자 이상이어야 합니다.',
|
||||
'required' => '비밀번호를 입력해 주세요.',
|
||||
'min_length' => '비밀번호는 8자 이상이어야 합니다.',
|
||||
'max_length' => '비밀번호는 255자 이하여야 합니다.',
|
||||
'regex_match' => '비밀번호는 영문·숫자·특수문자를 모두 포함해야 합니다.',
|
||||
],
|
||||
'mb_passwd_confirm' => [
|
||||
'required' => '비밀번호 확인을 입력해 주세요.',
|
||||
|
||||
Reference in New Issue
Block a user