Skip to content

ProfessionalSeaweedDevourer/networksecurity-practice

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

학사 관리 및 학생 자유게시판 시스템

정보보안론 과목 실습 과제로 제작된 PHP 기반 웹 애플리케이션입니다. 회원 관리, 게시판, 댓글, 소원 게시판 등의 기능을 포함하며, 주요 보안 취약점에 대한 방어 기법을 적용하였습니다.


기술 스택

구분 내용
언어 PHP
데이터베이스 MariaDB 10.4
서버 환경 localhost (XAMPP / MAMP 등)

데이터베이스 설정

20195229.sql 파일을 MariaDB에 임포트하여 데이터베이스를 초기화합니다.

mysql -u root -p mydatabase < 20195229.sql

데이터베이스명은 mydatabase이며, dbconn.php에서 접속 정보를 변경할 수 있습니다.

학번 중복 방지를 위해 아래 제약 조건이 적용되어 있습니다.

ALTER TABLE users
ADD CONSTRAINT unique_student_id UNIQUE (student_id);

테이블 구조

테이블 설명
users 회원 계정 및 학생 정보
students 별도 학생 정보 테이블 (show_students 기능용)
posts 게시글
comments 댓글
categories 게시판 카테고리 (오늘의 한마디 / 정보 / 유머)
wishes 소원 목록
courses 수강 과목 (현재 미사용)
grades 성적 (현재 미사용)

구조 및 기능

진입점

  • index.html: 메인 페이지. 로그인, 회원가입, 비회원 접속 버튼을 제공합니다.

회원 관리

파일 설명
register.php 회원가입 처리 (아이디 중복 확인, 비밀번호 해싱 후 저장)
student_info.php 회원가입 후 학생 정보 입력 폼
submit_student_info.php 학생 정보 저장 처리
edit_student_info.php 학생 정보 수정 폼
update_student_info.php 학생 정보 수정 처리
show_students.php 등록된 학생 목록 조회
login.php 로그인 처리 (세션 생성)
logout.php 로그아웃 (세션 파기)

회원가입 시 입력 항목: 학번 (8자리 숫자), 생년월일 (YYYYMMDD 형식 8자리), 학과 (사범대학/철학과/연극영화과/물리학과 중 택1)

비회원 접속

  • guest.php: 로그인 없이 접속하는 경우 이동하는 페이지입니다. 게시글과 댓글을 열람할 수 있으나 작성 및 상호작용은 불가합니다.

게시판 (회원 전용)

파일 설명
member.php 회원 전용 메인 페이지. 카테고리별 최신 게시글 3개를 표시합니다.
post_form.php 게시글 작성 폼
post_submit.php 게시글 저장 처리
edit_post.php 게시글 수정 폼 (작성자 본인만 접근 가능)
update_post.php 게시글 수정 처리
delete_post.php 게시글 삭제 처리 (작성자 본인만 가능)

게시글 수정 및 삭제 버튼은 작성자 본인으로 로그인한 경우에만 표시됩니다. 다른 사용자로 로그인한 상태에서는 수정/삭제 버튼이 노출되지 않으며, 이미 로그아웃한 뒤 재로그인하더라도 세션 기반으로 권한을 재확인합니다.

댓글

파일 설명
add_comment.php 댓글 작성 처리
edit_comment.php 댓글 수정 폼 (작성자 본인만 접근 가능)
update_comment.php 댓글 수정 처리
delete_comment.php 댓글 삭제 처리

소원 게시판

파일 설명
wish_form.php 소원 작성 폼
submit_wish.php 소원 저장 처리
wishes.php 모든 회원의 소원 목록 열람

보안 적용 사항

1. SQL 인젝션 방지

모든 데이터베이스 쿼리는 Prepared Statementsbind_param을 사용하여 사용자 입력값이 SQL 구문으로 해석되지 않도록 처리합니다. 클라이언트 및 서버 양쪽에서 입력값의 유효성을 검사합니다.

2. 비밀번호 해싱

회원가입 시 입력된 비밀번호는 password_hash 함수 (bcrypt 알고리즘)를 사용하여 해싱한 뒤 저장합니다. 로그인 시에는 password_verify 함수로 저장된 해시값과 입력값을 비교합니다. 평문 비밀번호는 어떠한 경우에도 데이터베이스에 저장되지 않습니다.

3. 입력값 유효성 검사

  • 이름: 정규표현식 ^[a-zA-Z가-힣\s]+$를 사용하여 허용된 문자만 입력 가능하도록 제한합니다.
  • 학번: 8자리 숫자로 제한합니다.
  • 생년월일: YYYYMMDD 형식의 8자리 숫자로 제한합니다.
  • 유효성 검사는 클라이언트(JavaScript)와 서버(PHP) 양쪽에서 수행합니다.

4. 세션 관리

로그인 시 세션을 생성하고, 로그아웃 시 세션을 파기합니다. 회원 전용 페이지 접근 시 세션 유효 여부를 확인하며, 유효하지 않은 세션은 로그인 페이지로 리다이렉트합니다.


실행 방법

  1. XAMPP, MAMP 등 PHP 및 MariaDB 환경을 준비합니다.
  2. 프로젝트 파일을 웹 서버의 루트 디렉터리(예: htdocs)에 배치합니다.
  3. 20195229.sql을 데이터베이스에 임포트합니다.
  4. 브라우저에서 http://localhost/[프로젝트 디렉터리]/index.html에 접속합니다.

About

SQL 인젝션 방지, 비밀번호 해싱, 입력값 유효성 검사, 세션 관리 적용한 PHP 기반 모의 학사 관리 및 학생 자유게시판 시스템

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors