Information Security

8 인증 처리 본문

Web Hacking/Web 기초

8 인증 처리

leeeeye321 2017. 11. 23. 00:27

인증 처리

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() 함수로 세션 아이디(폴더)까지 파기를 시켜준다.