kjh00n의 기록저장소

WEB 인증(Authentication) 본문

SW개발 보안 구축

WEB 인증(Authentication)

kjh00n 2024. 11. 15. 09:26

WEB 서비스 인증

Server의 자원을 요청한 Client가 시스템 또는 자원에 허가된 대상인지 확인

 

WEB 서비스 인증 종류

1. System 인증

  • Server가 설치된 운영체제의 계정을 통해 사용자를 인증
  • 익명(Anonymous) 인증 = 관리자가 미리 인증한 상태로 Client가 접속하는 방식
  • 기본(Basic) 인증 = WEB Server에 ID와 PW를 저장하고 WEB Page 요청시 ID와 PW를 전달하면 운영체제에서 인증
  • HTTP Digest 인증 = Window 운영체제에서 Domain이라는 계정을 통해 인증하는 방식
  • → Window 운영체제가 설치된 다수의 컴퓨터 모임을 Domain이라고 한다.
  • HTTP NTLM(Windows 통합) 인증 = Window Server 운영체제에서 지원하는 윈도우 웹 서버인 IIS에서 사용 가능
  • → NTLM : Window에서 사용하던 인증 시스템

 

2. Web Application 인증

  • WAS에서 지정한 방식으로 사용자 인증
  • 사용자가 직접 Server에 생성한 계정 정보를 이용하여 WAS가 인증을 처리하는 방식
  • Form Based Authentication

 

Form Based Authentication

  • HTML 기능 중에서 Form이라는 기능이 있다.
  • Form이라는 기능은 사용자에게 값을 입력받아 Server에게 전달하는 기능
  • 전달받은 Server는 WAS에서 입력값을 전달하고 WAS는 입력값을 코드에 따라 처리한다.
  • 나온 결과에 따라 응답을 진행한다.

기본(Basic) 인증

● Page의 Main Page 만들기 (index.html)

● /var/www/html/auth 디렉토리 만들기

● auth 디렉토리에 auth.html파일 만들기

● httpd.conf 설정

<directory "/var/www/html/auth">
    authtype basic
    # 기본 인증 방식을 사용하도록 설정 (사용자명과 비밀번호를 요청하는 방식)
    
    authname "ID/PW"
    # 인증 창에 표시될 메시지 (사용자에게 'ID/PW'라고 보여짐)
    
    authuserfile "/auth/userfile"
    # 사용자 이름과 비밀번호가 저장된 파일 경로
    # 이 파일에 등록된 사용자가 인증을 거쳐야 함
    
    require valid-user
    # userfile에 등록된 유효한 사용자만 접근 가능
    # 유효한 사용자만 이 디렉토리에 접근할 수 있음
</directory>

 

● 최상위 디렉토리 밑에 auth 디렉토리 만들기

● htpasswd -c /auth/userfile admin 입력

htpasswd
# Apache의 htpasswd 명령어는 사용자 인증 정보를 담은 파일을 생성하거나 수정하는 데 사용됩니다.

-c
# -c 옵션은 "create"를 의미합니다. 이 옵션은 새로운 사용자 파일을 생성하거나 기존 파일을 덮어쓰게 됩니다.
# (파일이 이미 존재하면 덮어쓰기가 되므로, 주의해서 사용해야 합니다.)

/auth/userfile
# 사용자 인증 정보를 저장할 파일 경로입니다.
# 이 파일에 사용자명과 암호화된 비밀번호가 저장되며, 웹 서버에서 인증을 할 때 사용됩니다.

admin
# 이 부분은 새로 추가할 사용자 이름입니다.
# 예를 들어, 'admin'이라는 사용자가 'userfile'에 추가됩니다.

● PW로 1234 입력 ↓

New password: [비밀번호 입력]
Re-type new password: [비밀번호 재입력]

#여기에 비밀번호로 1234 입력

● 이후에 192.168.50.200/auth/auth.html 접속

Login 요구
설정한 ID / PW 입력
접속 성공


Form Based Authentication

<form action="login.php">

    <!-- 사용자 ID를 입력할 텍스트 박스 -->
    ID: <input type="text" name="user_id"><br>
    # name="user_id"는 서버로 전송될 때 이 입력값을 'user_id'라는 이름으로 전송하게 됨
    # 예를 들어, 'user_id=admin'처럼 서버에 전달됨

    <!-- 사용자 비밀번호를 입력할 비밀번호 박스 -->
    PW: <input type="password" name="user_pw"><br>
    # type="password"는 입력한 문자가 화면에 보이지 않도록 숨김
    # name="user_pw"는 서버로 전송될 때 이 입력값을 'user_pw'라는 이름으로 전송하게 됨
    # 예를 들어, 'user_pw=1234'처럼 서버에 전달됨

    <!-- 로그인 버튼: 이 버튼을 클릭하면 폼이 제출되어 서버로 데이터가 전송됨 -->
    <input type="submit" value="로그인">
    # submit하면 'login.php' 페이지가 서버로 요청되고, 이 페이지에서 폼 데이터를 처리하게 됨
    # 즉, 'login.php'는 폼 데이터(user_id, user_pw)를 받아서 로그인 처리를 할 PHP 파일

</form>

● 192.168.50.200으로 접속 ↓

● ID에 root PW에 1234 입력 ↓ (GET 메소드로 입력됨)

● login.php (yum -y install php) (httpd를 재시작해서 php구동)

● /var/www/html/login.php 파일 만들기 ↓

<?php

    echo $_GET["user_id"];  
    # $_GET["user_id"]는 URL에서 'user_id'라는 파라미터 값을 가져옵니다.
    # 예를 들어, URL이 'example.com?user_id=admin'이라면 $_GET['user_id']는 'admin'이 됩니다.
    # 가져온 값을 화면에 출력하는 echo 함수가 실행됩니다.

    echo $_GET["user_pw"];  
    # $_GET["user_pw"]는 URL에서 'user_pw'라는 파라미터 값을 가져옵니다.
    # 예를 들어, URL이 'example.com?user_id=admin&user_pw=1234'라면 $_GET['user_pw']는 '1234'가 됩니다.
    # 가져온 값을 화면에 출력하는 echo 함수가 실행됩니다.

?>

● 다시 192.168.50.200에서 ID,PW치고 접속

login.php가 없다면, 폼을 제출해도 데이터가 전송되지 않거나, 데이터가 처리되지 않습니다.

login.php 파일을 작성하고, 그 안에 로그인 처리 로직을 추가해야만 사용자가 입력한 ID와 비밀번호를 검증하고, 로그인이 정상적으로 이루어집니다.

'SW개발 보안 구축' 카테고리의 다른 글

WEB Encoding  (0) 2024.11.15
WEB Session  (0) 2024.11.15
FTPS 구축  (0) 2024.11.14
SSL 서버 구축  (0) 2024.11.14
SSL  (0) 2024.11.14