UseModWiki소스수정/사용자암호보안 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: UseModWiki소스수정/사용자암호보안 는 읽기 전용 페이지입니다.
== 사용자 암호를 암호화하여 저장 == * 사용자가 [[UseModWiki환경설정]]에서 입력한 자신의 암호와 관리자 암호가 *.db 화일에 고스란히 평문으로 저장되는 문제를 해결 * perl 에서 제공하는 crypt 함수를 사용하여, 간단한 변환을 거친 후에 저장하도록 한다. * [[Bab2]]님이 작성한 패치를 변형시켜 적용 * 부작용: ** crypt 함수의 안정성에 의존하게 됨 ** crypt 함수의 호출로 인한 퍼포먼스 저하. crypt 는 암호화 함수라기보다는 단방향 해쉬 함수에 가깝기 때문에 크게 저하될 것이라 생각되지는 않으나... * 기존에 사용하던 사용자 데이타와 호환되지 않는다. (호환되게 할수도 있겠으나 귀찮아서..) 굳이 호환되게 하고 싶다면, 아래에 나오는 각종 if 문에서, 기존에 사용되던 조건문과 새로 변경된 조건문을 둘 다 검사하게 OR 로 연결해 주면 될 것이다. : {{{#!vim perl ... package UseModWiki; use strict; ### 다음 두 줄 추가 use vars qw($HashKey); $HashKey = "salt"; # 2-character string ### }}} * 위에 있는 $HashKey 변수는 crypt 에서 사용되는 키 값이다. salt 가 아닌 다른 문자열을 사용하도록 하고, 가끔 생각날때 한번씩 바꿔주면 좋을 것이다. 키를 바꾸더라도 기존에 사용하던 사용자 데이터는 그대로 사용할 수 있다. (키 값은 처음 두 글자만 의미가 있다. 세번째 이후는 바꾸나마나이니 주의) : {{{#!vim perl sub UserIsAdmin { ... foreach (split(/\s+/, $AdminPass)) { next if ($_ eq ""); ### 다음 라인 교체 # return 1 if ($userPassword eq $_); return 1 if (crypt($_, $userPassword) eq $userPassword); ### } return 0; } }}} : {{{#!vim perl sub UserIsEditor { ... foreach (split(/\s+/, $EditPass)) { next if ($_ eq ""); ### 다음 라인 교체 # return 1 if ($userPassword eq $_); return 1 if (crypt($_, $userPassword) eq $userPassword); ### } return 0; } }}} : {{{#!vim perl sub DoUpdatePrefs { my ($username, $password); ### 다음 라인 추가 my $hashpass = ""; ### ... $password = &GetParam("p_password", ""); ### 다음 라인 추가 $hashpass = crypt($password, $HashKey); ### if ($password eq "") { print T('Password removed.'), '
'; undef $UserData{'password'}; } elsif ($password ne "*") { print T('Password changed.'), '
'; ### 다음 라인 교체 # $UserData{'password'} = $password; $UserData{'password'} = $hashpass; ### } if ($AdminPass ne "") { $password = &GetParam("p_adminpw", ""); ### 다음 라인 추가 $hashpass = crypt($password, $HashKey); ### if ($password eq "") { print T('Administrator password removed.'), '
'; undef $UserData{'adminpw'}; } elsif ($password ne "*") { print T('Administrator password changed.'), '
'; ### 다음 라인 교체 # $UserData{'adminpw'} = $password; $UserData{'adminpw'} = $hashpass; ### if (&UserIsAdmin()) { print T('User has administrative abilities.'), '
'; ... } }}} : {{{#!vim perl sub DoLogin { ... &LoadUserData(); ### 다음 라인 교체 # if (defined($UserData{'password'}) && # ($UserData{'password'} eq $password)) { if (defined($UserData{'password'}) && (crypt($password, $UserData{'password'}) eq $UserData{'password'})) { ### $SetCookie{'id'} = $uid; ... }}} ---- [[위키위키분류]]
UseModWiki소스수정/사용자암호보안
페이지로 돌아가기 |
다른 수정본 보기