Information Security
8 인증 처리 본문
인증 처리
1. 아파치 웹 서버를 통한 인증
-인증을 한 번 통과한 웹 브라우저는 켜져 있는 이상 다시 인증 요청을 하지 않는다.
아파치 설정 파일을 수정한다.
...
...
위와 같이 작성한 후 저장한다.
변경 내용 적용
-설정 파일에 명시한 AuthUserFile을 생성한다.
-파일을 처음 생성하는 경우 -c(create) 옵션을 사용한다.
파일이 존재한다면 -c 옵션 없이 계정을 추가해준다.
파일의 내용 확인
-이제 /var/www/html 파일에 위치한 웹 페이지에 접근할 때 인증이 필요하게 된다.
-.htpasswd 파일에 명시된 계정만 접근이 가능하다.
-인증을 하면 인증 토큰을 발행한다. 이를 통해서 사용자의 인증 여부를 판단할 수 있다.
-위의 이미지에서 index.html 페이지의 인증을 통과하면 개발자 도구(F12 -> Network -> Headers)에서 Request Header의 Authorization 필드를 확인할 수 있다.
-Request Header에 Authorization 필드가 있어야 인증을 통과했다고 볼 수 있다.
-웹 브라우저를 다 내리면 이 필드가 사라진다.
※ Authorization 필드의 값을 www.base64decode.org에서 해독(decode)해볼 수 있다.
Authorization 필드의 값을 넣고 [DECODE]를 클릭하면
인증 시 입력한 계정과 패스워드가 나오는 것을 확인할 수 있다.
2. 웹 어플리케이션을 이용한 인증
인증 토큰의 종류
(1) COOKIE
-보안상 취약하다.
-인증을 하면 쿠키를 발행해서 사용자에게 전달한다.
-사용자의 개인 정보가 로컬 컴퓨터에 저장된다.
COOKIE를 이용한 인증
1) 아이디와 패스워드 입력: login.html
-로그인 화면 출력
-[login] 클릭 시 입력한 값 모두 POST 방식으로 login_ok.php에 전달
2) 사용자 정보 DB : user DB, user Table 생성
3) 인증 처리 어플리케이션: login_ok.php
POST 방식으로 전달된 id, pw 값을 각각 id, pw 변수에 저장한다.
전달받은 값을 where절을 통해서 DB를 조회하여 결과가 한 행 출력(조회 성공)되면 인증에 성공한 것이므로 로그인을 허락한다.
setcookie('이름', '값', '만료시간', '경로') 함수를 이용해서 쿠키를 생성한다.
login.html 페이지에서 로그인을 성공하면
Response / Request Headers에서 생성된 쿠키를 확인할 수 있다.
4) 로그아웃: logout.php
-일단 쿠키 정보가 있으면 로그인이 가능하도록 변경했다.
-isset() 함수: 변수에 값이 들어 있는지 없는지 검증한다.
쿠키 정보가 있으면 로그인이 되어 이 화면이 출력될 것이다.
콘솔에서 쿠키 값을 확인할 수 있다.
-로그아웃 페이지 작성
-로그아웃이 되면 쿠키가 없어져야 한다.
-> setcookie 함수를 사용하여 쿠키 값을 비운다.
-[logout]을 클릭하면 다시 로그인할 수 있는 페이지(login.php)로 연결된다.
쿠키 값이 비워진 것을 확인할 수 있다.
(2) SESSION
-TCP의 세션과는 전혀 다른 개념이다.
-사용자의 개인 정보를 서버에 저장한다.
-브라우저가 동작하는 동안에만 세션이 유지된다.
※ COOKIE, SESSION 모두 HTTP의 COOKIE 헤더를 통해서 전달한다.
-login_ok.php 파일의 앞 부분에 session_start() 함수를 호출했다.
-session_start(): 세션을 사용하는 어플리케이션은 무조건 해당 함수를 호출해야 한다.
-> 세션 값을 생성해서 사용자에게 쿠키를 통해 전달한다.
-login_ok.php 페이지에 접속하면 세션을 생성하게 된다.
-세션 아이디 확인
/var/lib/php/session 디렉터리에 위에서 확인한 세션 아이디(PHPSESSID)를 이름으로 한 폴더가 만들어진다.
이렇게 세션 변수에 직접 값을 넣어줄 수 있다.
세션 폴더에서 넣어준 값을 확인할 수 있다.
세션 인증을 해보려고 세션 값이 1이면 로그인이 가능하도록 변경했다.
세션 값에 1을 저장했으므로($_SESSION[islogin]=1) 로그인이 되어 위의 화면이 출력된다.
-로그아웃을 하면 세션이 사라져야 한다.
session_destory(): 세션 폴더안의 내용을 지워준다.
세션 폴더 확인
-setcookie() 함수로 세션 아이디(폴더)까지 파기를 시켜준다.
'Web Hacking > Web 기초' 카테고리의 다른 글
10 게시판 회원가입 페이지 + 로그인 페이지 구현 (0) | 2017.11.28 |
---|---|
09 게시판 기본 형식 구축 (1) | 2017.11.24 |
7 HTML + PHP + MySQL 실습 (0) | 2017.11.22 |
6 데이터베이스 (0) | 2017.11.17 |
5 PHP + form 태그를 통한 데이터 전달(GET/POST) (0) | 2017.11.16 |