특정 페이지에 암호를 걸어보자 > 강의(과거자료)

본문 바로가기

강의(과거자료)

특정 페이지에 암호를 걸어보자

페이지 정보

작성자 BiHon 댓글 0건 조회 12,938회 작성일 01-10-27 15:57

본문

▶ 특정 페이지에 암호를 걸어보자


※ 잠깐 알림글.
--------------------------------------------------------------------------------
본 강의는 BiHon(master@dreamphp.com, http://dreamphp.com)이 작성합니다.
강의글은 비혼이 딱 두곳(http://nzeo.com,http://phptip.com)에 우선적으로 올리고
있습니다. 잠깐 알림글이었습니다. 감사합니다. ^-^

쪽지와 메일로 강의전재를 하겠단 분들이 계셨는데 언제나 대답은 긍정이었습니다.
그렇다고 무단으로 게시물을 퍼가는 행위는 삼가해주셨으면 하옵니다.
--------------------------------------------------------------------------------


오늘 다룰 것은 매우 간단한 형태의 인증 구현입니다. 웹서핑중에 한번쯤은 이름과
암호를 넣어달라는 창을 본 적이 있을 것입니다. 없다면 오늘 보면 되구요. ^-^

바로 HTTP 인증이죠. 많이 사용되고 있으며, 무척 쉽게 구현이 되기 때문에 천천히
읽어보시고 실습해보시면 금방 자기 것으로 만들 수 있을거에요. 화이팅입니다~!

다른 긴 말은 않겠습니다. 일단 이 강의로 인증창 구현을 해본 다음 더 관심이 가는
부분에 대해서는 직접 찾아보시기 바랍니다. HTTP/1.0(RFC1945), HTTP/1.1(RFC2068).


그럼 먼저 예제를 볼까요?

[auth.php]
--------------------------------------------------------------------------------
<?
if (!isset($PHP_AUTH_USER)) {
header("WWW-authenticate: basic realm = \"회원 영역\"");
header("HTTP/1.0 401 Unauthorized");
echo "이름과 암호를 입력해주세요.";
exit;
} else {
echo "이름 : $PHP_AUTH_USER<br>
암호 : $PHP_AUTH_PW";
}
?>
--------------------------------------------------------------------------------
- 미리보기 : dreamphp.com/study2/auth/auth.php
- 소스보기 : dreamphp.com/study2/auth/auth.phps

해당 주소를 열어보면 이름과 암호를 입력해달라는 인증창이 뜹니다. 취소를 누르면
이름과 암호를 입력해달라는 메시지를 출력해주고, 내용입력없이 확인을 누르면 이름,
암호 문자열만 달랑 출력이 되죠. 이름과 암호에 아무 값이나 넣고 확인을 누르면
입력된 값이 출력되구요.

이 예제에서 보듯 입력된 이름과 암호는 각각 $PHP_AUTH_USER와 $PHP_AUTH_PW 변수에
저장이 됩니다. 이 변수를 이용하여 DB나 파일에 있는 사용자 정보와 비교해 통과
여부를 결정하는 것이죠.

그 부분만 추가하면 오늘의 강의는 끝나게 됩니다.


자-. 그럼 이름과 암호를 어디에 저장할까요? ^^ 물론 제 강의에서는 파일을 다루겠다
선언한 바가 있어 당근 파일을 이용합니다. 따로 MySQL 등을 배운 사람이라면 DB를
이용해도 됩니다. ^^ 응용은 어디까지나 사용자의 몫이니까요.

하지만 이번 경우는 간단한 형태기 때문에 암호화를 한다거나 하지는 않겠습니다.
미리 이름과 암호를 몇개 정해놓고 이를 이용하는 방법을 취하도록 하겠습니다.
어디까지나 하나의 응용 방법일 뿐이므로 마음에 들지 않는다면 직접 개선해보세요.
그러면서 실력이 느는 것이니까요. ^-^


먼저 사용자 이름과 암호를 변수에 선언해둔 파일이 하나 있어야겠죠.

[user.php]
--------------------------------------------------------------------------------
<?
$user = array(
"test"=>"1234",
"root"=>"admin"
);
?>
--------------------------------------------------------------------------------
- 소스보기 : dreamphp.com/study2/auth/user.phps


PHP 입문에서 다뤘습니다. 연관배열. array() 함수도 다뤘었죠. 뭐라구요? 기억이
안난다굽쇼? 정부는... i(T^T)i 훌쩍. 반성중입니다.

$user[test] = "1234";
$user[root] = "admin";

이렇게 표현할 것을 위처럼 간단히 표현한 것입니다. 만약 사용자를 더 추가할 경우
단순 타이핑 횟수를 줄여주기 위해서죠.


그 다음 해당 위치에서 처음 읽히는 문서, 네! index.html이나 index.php 등의 문서에
위의 user.php 파일을 include 또는 require해 사용하면 됩니다. 바로 예제로...


[index.html]
--------------------------------------------------------------------------------
<?
require "user.php"; // 사용자 정보

function authenticate() {
header("WWW-authenticate: basic realm = \"회원 영역\"");
header("HTTP/1.0 401 Unauthorized");
echo "이름과 암호를 입력해주세요.";
exit;
}

if(!$PHP_AUTH_USER || !$PHP_AUTH_PW) {
authenticate();
} else {
if ($user[$PHP_AUTH_USER]!=$PHP_AUTH_PW) authenticate();
}
?>
<html>
<head>
<meta http-equiv='content-type' content='text/html; charset=euc-kr'>
<title>::: BiHon's DreamPHP.com ::: - Authenticate</title>
</head>
<body bgcolor='black' text='white'>
<pre>
▷ 어서오세요. 회원 영역입니다.

- 오늘의 소식

1. 앞집 강아지가 옆집 강아지의 다툼이 뒷집 강아지의 중재로 해결되었습니다.
때문에 이웃 동네 강아지들의 귀감이 되고 있답니다.

"왈왈왈! 멍멍멍! 크르릉~ 컹!컹! 깨깽~~ 아마 이랬을 것입니다."

긴급속보입니다.

하루살이가 하루밖에 못살지 않느냐는 장수잠자리의 빈정거림에 열받은 나머지
그자리에서 즉사했다는 참으로 안타까운 소식입니다.

"에- 표현이 안됩니다. ㅠ_ㅠ"

2. 끝입니다~


썰렁하다고 돌 던질 준비를 하는 자들에게 이르노니, 너희는 정녕 남을 웃겨보았느냐.
남을 웃겨보지 않은자가 어찌 남을 웃기기 위해 노력하는 자에게 매정히 돌을 던질수 있겠느뇨.
자고로 노력하는 모습은 보기좋나니 그만 돌은 내려놓도록 하시게. 움~움~움핫핫핫~!


... Special example document.
</pre>
</body>
</html>
--------------------------------------------------------------------------------
- 미리보기 : dreamphp.com/study2/auth
- 소스보기 : dreamphp.com/study2/auth/index.phps


이 이전의 강의까지 차근차근 읽어온 분들이라면 프로그램의 흐름에 대해서는 이해할
수 있겠죠?

제일 처음 require "user.php"; 란 명령으로 사용자 정보를 포함합니다.
나중에 user.php 파일에 사용자 아이디와 암호만 추가하면 되기 때문에 편하죠.
index.html 파일의 처음에 해당 내용을 그대로 삽입해도 됩니다.

다음으로 인증과 관련된 부분을 함수로 만들어놓고 사용자 이름과 암호가 없거나,
사용자 정보와 값이 다른 경우 함수를 불러 인증을 요구하게 하는 것입니다. 이게
전부입니다. ^^

이해가 안되는 부분에 대해서는 http://nzeo.com/bbs/zboard.php?id=p_bihon_qa
이 게시판에 올려주세요. 강의와 관련된 질문이기 때문에 메일과 쪽지는 사절입니다.

그럼 즐거운 하루하루 되세요~

댓글목록

등록된 댓글이 없습니다.

회원로그인


Copyright © 1998~2019 DreamPHP.com All rights reserved.