이 기사의 예에서는 PHP 양식 기반 비밀번호 인증 및 HTTP 인증의 사용법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.
PHP의 HTTP 인증 메커니즘은 PHP가 Apache 모듈로 실행될 때만 작동하므로 이 기능은 CGI 버전에는 적용되지 않습니다. Apache 모듈의 PHP 스크립트에서는 header() 함수를 사용하여 클라이언트 브라우저에 "인증 필요" 정보를 전송하면 사용자 이름/비밀번호 입력 창이 팝업되도록 할 수 있습니다. 사용자가 사용자 이름과 비밀번호를 입력하면 URL이 포함된 PHP 스크립트는 사전 정의된 변수 PHP_AUTH_USER, PHP_AUTH_PW 및 AUTH_TYPE을 추가하고 이 세 가지 변수는 각각 사용자 이름, 비밀번호 및 인증 유형으로 설정됩니다. 사전 정의된 변수는 $_SERVER 또는 $HTTP_SERVER_VARS 배열에 저장됩니다. "기본" 및 "다이제스트"(PHP 5.1.0부터) 인증 방법을 지원합니다. 관심 있는 친구들은 header() 함수 관련 정보를 참고하면 됩니다.
PHP 버전 문제: $_SERVER 등을 포함한 자동 전역 변수는 PHP 4.1.0부터 유효하고, $HTTP_SERVER_VARS는 PHP 3부터 유효합니다.
다음은 페이지에서 클라이언트 인증을 강제하는 예제 스크립트입니다.
예제 34-1. 기본 HTTP 인증 예시
안녕하세요 { $_SERVER [ 'PHP_AUTH_USER' ]} .
비밀번호로 { $_SERVER [ 'PHP_AUTH_PW' ]}를 입력하셨습니다.
" }위의 예에서는 PHP_AUTH_USER 및 PHP_AUTH_PW 값만 인쇄되지만 실제 응용 프로그램에서는 사용자 이름과 비밀번호의 유효성을 확인하거나 데이터베이스 튜토리얼을 쿼리하거나 dbm 파일 .
일부 Internet Explorer 브라우저에는 고유한 문제가 있습니다. 헤더 순서가 좀 까다로운 것 같습니다. 현재 HTTP/1.0 401을 보내기 전에 WWW-Authenticate 헤더를 보내면 이 문제를 해결할 수 있는 것으로 보입니다.
PHP 4.3.0부터 기존 외부 메커니즘으로 인증된 페이지에서 누군가가 비밀번호를 얻기 위한 스크립트를 작성하는 것을 방지하기 위해 특정 페이지에 대해 외부 인증이 유효하고 보안 모드가 켜져 있을 때 PHP_AUTH 변수는 설정되지 않으나, REMOTE_USER를 이용하여 외부에서 인증된 사용자를 식별할 수 있으므로 $_SERVER['REMOTE_USER'] 변수를 이용할 수 있습니다.
구성 지침:PHP는 AuthType 지시문을 사용하여 외부 인증 메커니즘이 유효한지 확인합니다.
이렇게 해도 누군가가 인증되지 않은 URL을 사용하여 동일한 서버에 있는 인증된 URL에서 비밀번호를 훔치는 것을 방지할 수는 없습니다.
Netscape Navigator 및 Internet Explorer 브라우저는 401 서버 반환 메시지를 수신할 때 전체 도메인에 대한 모든 로컬 브라우저의 Windows 인증 캐시를 지웁니다. 이렇게 하면 사용자가 효과적으로 로그아웃되고 사용자 이름과 이름을 다시 입력해야 합니다. 어떤 사람들은 로그인 상태를 "만료"하거나 "로그아웃" 버튼의 응답 동작으로 이 방법을 사용합니다.
예 34-3. 사용자 이름과 비밀번호를 강제로 재입력하는 HTTP 인증의 예
코드 복사
다음 사용자 이름을 입력하셨습니다: $PHP_AUTH_USER
코드 복사
코드는 다음과 같습니다.
if (!isset($PHP_AUTH_USER)) {
header('WWW-인증: 기본 영역="내 개인 정보"');
header('HTTP/1.0 401 권한 없음');
echo '인증이 필요합니다.';
종료
}
else if (isset($PHP_AUTH_USER)) {
if (($PHP_AUTH_USER != "관리자") || ($PHP_AUTH_PW != "123")) {
header('WWW-인증: 기본 영역="내 개인 정보"');
header('HTTP/1.0 401 권한 없음');
echo '인증이 필요합니다.';
종료
} 다른 {
권한이 있습니다!
"; }