Naver Perl Community & Study Cafe


2009.03.14 04:30

ID 및 PASSWORD 인증 설정


- Id와 비밀번호 인증 설정하기



여러 인증방법을 생각해보다가... MD5 hash + base64 를 선택했다.

perl에는 Digest::MD5 모듈이 존재함으로 쉽게 MD5 hash가 쉽게 설정 가능하다.

거기다 코어모듈이니 설치할 필요도 없으니 금상첨화 !!

밑의 두 방법중 하나를 선택하여 $data에 값을 넣고 모듈을 사용하면,

원하는 값으로 변환된다.
 # Functional style
 use Digest::MD5 qw(md5 md5_hex md5_base64);

 $digest = md5($data);
 $digest = md5_hex($data);
 $digest = md5_base64($data);

 # OO style
 use Digest::MD5;

 $ctx = Digest::MD5->new;

 $ctx->add($data);
 $ctx->addfile(*FILE);

 $digest = $ctx->digest;
 $digest = $ctx->hexdigest;
 $digest = $ctx->b64digest;


이제 인증부분을 처리하는 방법에 대해서 한번 생각해보자.

첫번째, id와 비밀번호에 아무값도 입력되지 않았을 때

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$id =~ s/ //g; #스페이스 공백 제거
if($id eq ''){
	show_message_dialog($window, #에러메세지 출력
	$m_type->{'nick'},		
	$error_msg{id_empty},
	'ok');
} elsif($passwd eq ''){ show_message_dialog($window, $m_type->{'nick'}, $error_msg{pw_empty}, 'ok'); }

간단하게 $id 부분만 공백을 제거했는데

특수문자 사용으로 문제가 될 경우에는 위쪽에 치환구문에서 제어 가능하다.


웹상이 아닌 시스템에서 동작하는 레벨은 데이터 베이스를 연동한 것도 아니고...

마땅히 취약점이 없는 듯 했다. (나야 다 알고 있지만...)




두번째, id가 존재하지 않을때

id가 존재하는지에 대한 여부는

입력한 ID의 폴더가 존재하느냐 존재하지 않느냐에 따라서 결정된다.

ID의 폴더는 MD5 hash + base64 사용하여 해쉬를 시켜 폴더이름을 만들었으며,

파일안에 있는 userinfo.dat 파일을 읽어오도록 설정하였다.

폴더가 없을시 아래 문구를 출력한다.




세번째, id는 존재하는데 password가 맞지 않을 때

ID가 존재한다면 password가 저장된 userinfo.dat 파일을 읽어와서

사용자가 입력한 패스워드와 비교해서 맞을때만 인증 되도록 한다.

그렇지 않을시에는 아래와 같은 문구를 출력한다.



팁으로 위의 두 창의 내용대로 문구가 출력된다면,

이런경우는 ID를 유추할 수 있으므로,

"ID 또는 Password가 틀렸습니다" 라는 문구가 옳다.




개인적인 생각으로 만들고 정리해 본 터라

뭔가를 많이 빠뜨린 느낌이 든다.

입력값의 길이 설정은 id 와 password 입력창에서 제어가 가능하고,

로컬상에서는 마땅히 더 설정할 꺼리가 있으려나?

부족한 부분이 있다면 댓글좀 달아주세요^^




JEEN님이 소개해주신 id와 password을 편리하게 제어하는 모듈인

FormValidator::Simple 도 다음에 기회가 된다면


연구해 봐야 할 듯.



이번 포기 사유는....


기본 CGI 예제에다가 의존모듈이 많고, 윈도우 설치가 계속 에러뜨는 관계로 인해...

ㅠ_ㅠ
신고
Trackback 0 Comment 0