1 개요[ | ]
- PHP로 Digest 인증 구현
- PHP HTTP Digest authentication 구현
- 순수 PHP로 구현한 다이제스트 인증
2 소스[ | ]
PHP
Copy
<?php
function http_digest_parse($txt) {
$needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1);
$data = array();
preg_match_all('@(\w+)=(?:(?:\'([^\']+)\'|"([^"]+)")|([^\s,]+))@', $txt, $matches, PREG_SET_ORDER);
foreach ($matches as $m) {
$data[$m[1]] = $m[2]?$m[2]:($m[3]?$m[3]:$m[4]);
unset($needed_parts[$m[1]]);
}
return $needed_parts ? false : $data;
}
function is_auth() {
$users = array('jmnote'=>'P@ssw0rd', 'guest'=>'guest');
if(empty($_SERVER['PHP_AUTH_DIGEST']))return false; // 오류
$data = http_digest_parse($_SERVER['PHP_AUTH_DIGEST']);
if($data === false)return false; // 오류
global $username;
$username = $data['username'];
if(!isset($users[$username])) return false; // 아이디 틀림
$ha1 = md5($username.':'.$data['realm'].':'.$users[$username]);
$ha2 = md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);
$response = md5($ha1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$ha2);
if($data['response'] != $response) return false; // 패스워드 틀림
return true;
}
if( !is_auth() ) {
$realm = 'Digest Auth Test';
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Digest realm="'.$realm.'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');
echo '<meta charset="utf-8">';
echo '로그인이 필요합니다.';
exit;
}
echo '<meta charset="utf-8">';
echo "$username 님 반갑습니다.";
- → jmnote // P@ssw0rd 또는 guest // guest 로 로그인 가능.
3 같이 보기[ | ]
4 참고[ | ]
편집자 Jmnote Jmnote bot
로그인하시면 댓글을 쓸 수 있습니다.
- 분류 댓글:
- PHP (8)
PHP 파일 다운로드 구현 2 (한글 파일명 지원) ― …PHP에서 오라클 DB 사용 ― YoWuPHP 파일 업로드 구현 ― 일리단사오육칠PHP 파일 업로드 구현 ― JmnotePHP 파일 다운로드 구현 2 (한글 파일명 지원) ― AnmkstLib my.php ― 신정섭Lib my.php ― Jmnote로또번호 생성 ―Pinkcrimson