일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 바람의나라
- 아이유
- 일본패치
- 폭선우의무덤
- 페그오
- 매드클라운
- 에미넴
- 페이트그랜드오더
- 2차신수
- 바람의나라연
- 어린궁기
- 돌림판이벤트
- 영어단어
- 모바일바람의나라
- 2차승급
- 매일영어단어외우기
- 체마1등
- 미국주식
- 주작의용천제일검
- 보물수호
- 막피범
- 걸스데이
- 매일영어단어
- 수지
- 북천황의감옥
- 나스닥
- 타라옷
- 레어닉
- 피렌체
- Eminem
- Today
- Total
티스의 이야기
PHP-로그인 폼작성 본문
PHP-로그인 폼작성
<?PHP
// h() 함수 레시피 218를 불러옵니다 레시피 041.
require_once '../../../../lib/h.php';
// password_verify() 함수 레시피 217를 불러옵니다.
require_once '../../../../lib/password_compat/password.php';
// 클릭 재킹(Clickjacking)을 방지 레시피 287합니다.
header('X-FRAME-OPTIONS: SAMEORIGIN');
// 세션을 시작합니다.
session_start();
// 사용자명과 암호를 설정합니다. 복수 사용자 계정을 설정할 수 있습니다.
$userid[] = 'admin'; // 사용자 ID
$username[] = '관리자'; // 이름
// 패스워드 'pass1'를 password_hash() 함수로 해시화한 문자열
$hash[] = '$2y$10$7llM8TDTW3cxrMPzwd1ydOky3FP7yYOzn/d4bEWWbeFDiQ.tTbM3O';
$userid[] = 'test';
$username[] = '테스트';
// 패스워드 'pass2'를 password_hash() 함수로 해시화한 문자열
$hash[] = '$2y$10$qNxqM4UP79klxfqV9cIwcO6LBJI44Z34k76m9w9teN.PLpfTe8lxG';
// 오류 메세지의 변수를 초기화합니다.
$error = '';
// 인증 여부의 세션 변수를 초기화합니다.
if (! isset($_SESSION['auth'])) {
$_SESSION['auth'] = false;
}
if (isset($_POST['userid']) && isset($_POST['password'])) {
foreach ($userid as $key => $value) {
if ($_POST['userid'] === $userid[$key] &&
// 입력된 패스워드 문자열과 해시화된 패스워드를 조합합니다.
password_verify($_POST['password'], $hash[$key])) {
// 세션 고정화 공격 레시피 298을 막기 위해 세션 ID를 변경합니다.
session_regenerate_id(true);
$_SESSION['auth'] = true;
$_SESSION['username'] = $username[$key];
break;
}
}
if ($_SESSION['auth'] === false) {
$error = '사용자 ID나 패스워드가 잘못되었습니다.';
}
}
if ($_SESSION['auth'] !== true) {
?>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>간단한 로그인 폼을 작성하고 싶을 때</title>
</head>
<body>
<div id="login">
<h1>인증 폼</h1>
<?php
if ($error) { // 오류 메세지가 세팅되어 있으면 빨간색으로 표시
echo '<p style="color:red;">' . h ($error) . '</p>';
}
?>
<form action="<?php echo h($_SERVER['SCRIPT_NAME']); ?>" method="post">
<dl>
<dt><label for="userid">사용자 ID:</label></dt>
<dd><input type="text" name="userid" id="userid" value=""></dd>
</dl>
<dl>
<dt><label for="password">패스워드:</label></dt>
<dd><input type="password" name="password" id="password" value=""></dd>
</dl>
<input type="submit" name="submit" value="로그인">
</form>
</div>
</body>
</html>
<?php
// 스크립트를 종료하고 인증이 필요한 페이지가 표시되지 않도록 합니다.
exit ();
}
'프로그래밍' 카테고리의 다른 글
PHP-메일전송 폼을 작성하고 싶을때 (0) | 2016.06.15 |
---|---|
PHP-인증을 요구하고 싶은 페이지 (0) | 2016.06.14 |
PHP-데이터베이스에서 선택 메뉴생성 (0) | 2016.06.10 |
무료 Ajax 강의 배우기 (0) | 2015.11.03 |
cmd 기본 (0) | 2015.08.12 |