웹 서버에서
사용자들을 어떻게 인증할까?

* 웹에서의 인증 특징
 - TCP통신을 한다. 일반적인 인증과 동일하게 진행할 수도 있다.
 - 웹의 특성상 세션을 유지하지 않는다.
 - 웹 서버 어플리케이션은 사용자 인증을 위한 인증 토큰을 발행한다.

인증 토큰에는 두가지가 있다.
1. 쿠키 (Cookie)
-> 보안에 취약하다.
-> 사용자 정보가 로컬 컴퓨터에 남는다.

2. 세션 (Session)
-> 쿠키의 보안 취약점을 개선하기 위해 나온 것이 세션이다.

그렇다면 이러한 인증 과정을 직접 확인해보겠다.
먼저 간단한 웹 인증페이지를 만들어 볼것이다.

auth 폴더를 따로 만들어서 여기서 작업을 하겠다.



(auth 폴더 생성)



vi 편집기를 이용해 login.php 파일을 작성한다.
#> vi login.php



(login.php)



간단하게 아이디와 비밀번호를 입력 받아
login_ok.php 파일에 전송해주는 페이지이다.



(페이지 모습)



그렇다면 이제 login_ok.php 파일을 만들어서
인증 과정을 만들어볼 것이다.

아직 DB를 손데지 않고 간단히 연관배열을 사용하여 인증을 해보겠다.

연관 배열 사용 테스트이다.
user1 ~ 3을 만들고 해당 비밀번호를 연관 배열로 설정한다.
그리고 입력받은 아이디의 비밀번호를 화면에 출력해보겠다. (테스트)



(login_ok.php)



이제 잘 동작하는지 체크해보겠다.
실행



(아이디 user1 입력)




(실행화면)



실행 화면에 user1의 비밀번호가 잘 출력된 것을 확인 할 수 있다.

이제 이 것을 사용하여 인증을 해보겠다.
php 언어에서 array_key_exists 함수를 사용해 해당 아이디에 관해 연관배열의 값이 있는지 체크하고
있다면 비밀번호가 입력받은 것과 일치하는지 체크해서 인증을 하겠다.



(login_ok.php)



결과 인증에 성공하면
로그인 성공이라고 팝업창을 띄우고
실패하면 실패라고 팝업창을 띄우는 script를 추가했다.

실행해서 확인해보겠다.



(접속)




(로그인 성공)






(로그인 실패)



비밀번호를 올바르게 입력했을 때 success가 뜨고
실패했을 때는 fail이라고 잘 떴다.

로그인 인증까지 확인했으니
이제 토큰 방법 중 하나로 쿠키를 사용해보겠다.
인증에 성공했을 경우에
쿠키를 추가해주는 코드를 추가해줄 것이다.
쿠키 설정 php 언어
setcookie("쿠키이름", "쿠키에 넣을 값", 유효기간, 쿠키값이 적용될 영역)
하나는 user_id의 쿠키 변수에 id를 그대로 사용했고
session_id 쿠키 변수에는 ID와 비밀번호를 연결해 해쉬함수로 바꾸어서 사용했다.



(쿠키 생성)




login.php 페이지에서
쿠키 값을 출력해보겠다. (쿠키값이 잘 설정되는지 확인하기 위하여)



(쿠키값 확인 코드)





실행



(실행 화면)




실행 화면을 보니 위에 우리가 설정해준 쿠키값이 잘 저장되 있는 것을 확인 할 수 있다.

F12 키를 눌러 관리자 모드에서 네트워크 부분으로 어떤 통신을 주고 받는지 확인 할 수 있는데
여기서 응답으로 쿠키 값을 보내준 것을 확인 할 수 있다.




(쿠키값 전달(응답))




혹은
관리자 모드에서 Console창에서도 확인 할 수 있다.
document.cookie
를 입력하면 나온다.


(저장된 쿠키값)




이제 이 쿠키값으로 인증을 해보겠다.
사실 이 쿠키값을 비교하여 일치하면 인증을 해주는 방식인데
우리는 여기서 간단하게 해보겠다.! ㅎㅎ
간단하게
쿠키값이 저장되어있다면!
로그인 을 해주도록 할 것이다.



(인증 코드 추가)





그렇게 하여 인증이 되면 해당 ID를 불러와 Welcome 페이지를 보여주고
인증이 안되었으면 로그인하는 페이지가 보이도록 하였다.

인증에 성공하면 아래와 같이 나온다.




(인증 성공)





(Console에서 확인)




콘솔에서도 확인 할 수 있다.

이렇게 편하고 좋은 쿠키가 보안에는 취약할 수 있다.
쿠키가 로컬 컴퓨터에 그대로 저장되기 때문에
만약 쿠키값으로 ID 혹은 패스워드를 그대로 사용하면
굉장히 위험하게 된다.

윈도우 IE에서 쿠키 값을 저장하는 곳을 확인해보겠다.
인터넷 옵션에 들어간다. 그 후 설정을 눌러준다.




(설정 클릭)




여기서 아래의 표시된 부분이
쿠키값이 저장되는 부분이다.




(쿠키 위치)




파일 보기를 누르면 해당 폴더가 열린다.




(쿠키 파일)





여기에는 쿠키파일 뿐 아니라 인터넷 임시 파일들도 저장되어 있다.

한번 로그인하여 우리의 소중한 쿠키가 어떻게 저장되는지 확인해 볼 것 이다.




(로그인)





(성공)



해당 폴더에 들어가서 확인해보니 우리가 방금 얻어온 쿠키값이 그대로 저장되 있는 것을
확인할 수 있다.



(쿠키값 파일)




이제 로그아웃 링크를 하나 만들어주어 쿠키값을 없애보도록 할 것이다.
만약 이 기능이 없다면
로그인이 한번 되면 적어도 하루 동안은 그 페이지 로그인 페이지를 볼 수 없다...

로그아웃 기능 추가!



(링크추가)



로그아웃에 하이퍼링크로 logout.php 페이지를 입력해놓았다.
우리는 logout.php 페이지에서 logout을 해줄 것이다.



(logout.php 파일 생성)




쿠키를 지우는 방법은 아까 setcookie 함수를 사용했던 것과 같다.
다만 쿠키값을 "" 빈 채로 설정하는 것이다.




(logout.php 코드)




다시 화면에 가보면 logout 링크가 되있는 것을 볼 수 있다.




(logout 추가)




버튼을 누르면
다시 login.php 페이지에서 로그인 화면을 볼 수 있다.




(로그인 페이지)




두 번째 토큰 방법으로 session이 있다.
이 session은 브라우저가 열려있을 때만 유효하고
닫히게 되면 session이 사라지는 특징이 있다.

중요한 특징은
서버에 저장된다는 것이다. (그렇기에 쿠키에 비해 안전하다고 할 수 있다.)

login_ok.php 파일에서
아까 만든 쿠키 설정은 주석으로 처리해 두고
세션 값을 설정해주겠다.
방법은
session_start();
를 입력하는 것이다.



(세션 추가 코드)




페이지에 접속하자마자 세션ID 쿠키를 만들어 준다.
바로 이게 session_start() 가 하는 일이다.

이 값을 확인해 보겠다.




(세션ID값 확인)




(콘솔에서 확인)



물론 콘솔에서도 확인 할 수 있다.

이 값은 아까 서버에 저장된다고 했었는데
그 위치는
/var/lib/php/session/ 에 파일로 존재하게 된다.
그렇기에 아까 확인했던 값이 파일 이름형태로
저장되있는 것을 확인 할 수 있다.



(세션 ID 위치)




세션ID가 설정되어있는 것 까지 확인했다.
이제 다음에
이 세션ID에 인증내용을 추가하는 기능을 만들어 확인하겠다.



+ Recent posts