서버를 구축한다?
웹 프론트엔드가 구현되었다면, 클라이언트는 브라우저를 통해 로그인 등의 기능을 수행하고자 합니다. 이러한 기능 구현을 위해 백엔드에서는 해야할 일들이 있습니다.
① 먼저 클라이언트의 요청을 받고 이를 응답할 수 있어야 합니다. 이를 웹 서버(Web Server)가 담당합니다.
→ Web Server (ex: Apache2, Nginx)
② 요청에 대한 응답이 가능하다면 로그인, 검색 등 상황에 맞는 기능을 개발해야 합니다. 이는 클라이언트에게 보여지는 부분이 아닌 서버에서 실행되어야 하는 부분이기에 서버 사이드 언어를 사용해 개발을 해야합니다.
→ 서버에서 기능을 담당하는 프로그래밍 언어인 PHP, JSP, ASP 등
③ 그리고 기능을 정상적으로 실행하기 위해서는 서버 사이드 언어로 개발한 것을 해석해주는 과정이 필요합니다.
→ 서버 사이드 언어를 해석하여 실행하고 크게 두가지로 나뉩니다.
PHP: Web Server에 모듈 형태로 설치
JSP: 전용 WAS(기존 Web Server의 기능에 서버 사이드 언어에 대한 해석이 가능한 소프트웨어: Tomcat, JBoss, Jeus) 설치
④ 마지막으로 회원 가입 등의 기능을 위해서는 데이터를 저장해주는 것이 필요합니다.
→ DBMS(MySQL, Oracle, MSSQL)
그중에서도 저희는 다음과 같은 패키지를 설치하여 웹 서버를 구축하고자 합니다.
웹 서버: Apache2
서버 사이드 언어 해석기: php
DBMS: MySQL
Apache2라는 웹 서버와 서버 사이드 언어 해석기인 php는 서로 연결이 되어야 합니다. 그래야 클라이언트로부터 요청이 들어오면 웹 서버가 받아주고, 실제 기능은 서버 사이드 언어를 해석해서 제공해줄 수 있습니다.
이 두 프로그램을 연결시켜주기 위한 프로그램인 libapache2-mod-php도 설치합니다.
또한 서버 사이드 언어 해석기인 php와 DBMS인 MySQL도 서로 연결되어 있어야 합니다. 그래야 어떠한 기능을 수행하면서 동시에 저장된 데이터를 이용할 수 있습니다.
이 두 프로그램을 연결시켜주기 위한 프로그램인 php-mysql도 설치합니다.
이제 실습에 사용할 간단한 로그인 페이지를 만들어봅시다.
실습에 사용할 간단한 로그인 페이지 구축하기
1. HTML로 로그인 페이지 구현
html 홈 디렉터리인 /var/www/html에 login.html 파일을 생성합니다.
sudo vi login.html
2. 회원 정보를 저장하기 위한 DataBase 구축하기
우분투의 root 계정으로 mysql의 root 계정에 접속합니다.
sudo mysql
login이라는 database을 만들고, use 명령어를 통해 생성한 database를 사용합니다.
create database login;
use login;
이제 table을 생성합니다. user라는 테이블을 생성하고, 테이블에 포함될 문자인 id, pw를 추가합니다.
create table user(id text, pw text);
생성한 table에 데이터를 넣어줍니다.
insert into user(id,pw) values('test', 'test');
목록을 보여주는 show 명령어를 통해 database, table이 생성됐는지 확인할 수 있고, SELECT 명령어를 통해 조회할 수 있습니다.
show databases;
show tables;
select id,pw from user; // where id='test' 조건절을 넣을 수 있다
# select * from user; 모든 필드를 가져오는 *
DELETE 명령어를 통해 테이블의 데이터를 삭제할 수 있으며, DROP 명령어를 통해 데이터베이스와 테이블을 삭제할 수 있다.
delete from user; # where pw='test' 조건절 추가 가능
drop table user;
drop database login;
php라는 서버 사이드 언어에서도 만든 데이터를 이용할 수 있도록 웹 서비스 전용 MySQL 계정을 만들어서 login 이라는 데이터베이스를 사용할 수 있도록 권한을 줍니다.
webhacking 이라는 사용자를 만드는데 패스워드도 webhacking입니다.
create user 'webhacking'@localhost identified by 'webhacking';
login 데이터베이스 안에 있는 모든 테이블을 사용할 수 있는 권한을 부여합니다.
grant all privileges on login.* to 'webhacking'@localhost;
3. 로그인 기능이 구현된 PHP 코드 구현하기
html 홈 디렉터리인 /var/www/html에 login.php 파일을 생성합니다.
4. 최종 구현
로그인 시도 후 입력한 id, pw으로 이루어진 query문과 로그인 성공 여부를 반환하도록 구현하였습니다.
5. 출처
'보안 > 웹 해킹' 카테고리의 다른 글
Blind SQL Injection 실습 (0) | 2023.04.05 |
---|---|
SQL Injection 실습 (0) | 2023.01.14 |