중앙대학교 산업보안학과 전공필수 '전자정보 보안기술' 과제입니다.
(현재 정보보안론(Information Security)로 과목명이 변경되었습니다)
과목 정보
- 유형: 이론 강의
- 학점: 3학점
- 시간: 3시간
Readme.txt
에 동일한 내용이 재구성되어 작성되었습니다. (과제 제출용)
runme.exe
파일을 통해 컴퓨터에 데이터베이스를 구축할 수 있습니다.
runme.exe -i
을 통해 library
DB를 설정하고 계정을 생성합니다.
이때 화면에 표시된 명령어를 모두 복사 및 붙여넣기해야 합니다.
runme.exe -r
을 통해 library_db.sql
파일에서 library
DB의 내용을 불러옵니다.
runme.exe -b
을 통해 데이터베이스를 백업할 수 있습니다.
. // runme.exe, index.html, library_db.sql, readme.md 등
├───account // 사용자가 접근하는 계정 관련 페이지입니다.
├───books // 사용자가 접근하는 책 관련 페이지입니다.
├───db // 데이터베이스를 처리하는 PHP 파일들입니다.
├───htmls // html 코드 조각입니다.
├───manage // 관리자가 접근하는 페이지입니다.
├───resources // 웹페이지에 삽입되는 사진 등 리소스 파일들입니다.
├───scripts // TypeScript로 작성된 파일들입니다.
│ └───js // TypeScript를 컴파일한 JavaScript 결과물입니다.
└───styles // CSS 파일들입니다.
20234748.sql 파일과 library_db.sql 파일은 내용이 동일합니다.
과제 제출 조건을 만족하기 위해 학번으로 된 파일을 따로 생성하였으며,
runme.exe
파일에서는 library_db.sql 파일을 사용하기에 동일한 파일을
생성하였습니다.
- 본 페이지에서는 데이터베이스에 저장된 도서 목록을 확인하고, 대출할 수 있습니다.
- 회원가입 및 로그인이 가능하며, 비밀번호는 SHA-256으로 암호화되어 저장됩니다.
- 사용자 계정으로 로그인한 경우, 도서 대출 및 반납이 가능합니다.
- 고급 검색 기능을 제공하며, AND 및 OR 조건으로 검색이 가능합니다.
- admin 계정으로 접속시 도서의 정보 및 대출 상태를 관리할 수 있습니다.
-
- admin의 경우 각 도서를 클릭하면 나타나는 상세 페이지에서 관리자<->사용자 모드를 전환할 수 있습니다.
- 새로 들어온 도서 목록을 제공하며, 최신순으로 상위 50%의 도서를 보여줍니다.
- footer를 하단에 고정하여 일관성 있는 디자인을 완성했습니다.
- 마이페이지에서 체크박스를 통해 대출한 도서를 일괄 반납할 수 있습니다.
- '새로 들어온 도서' 에서는 SubQuery를 이용하여 도서 중 상위 50% 이내로 일찍 들어온 도서를 나열합니다.
- 각 책의 상세페이지에서는 LEFT JOIN을 이용하여 추가 정보를 출력합니다.
- 동일한 페이지 내에서 PHP를 이용해 Guest/User/Admin의 기능을 구분했습니다(/books/listall.php 등)
- 검색창에서 Radio Button을 이용하여 AND, OR 검색 옵션을 지정할 수 있습니다.
- CSS를 활용하여 심미성을 강조한 표 디자인을 완성했고, 마우스 포인터가 올려진 셀이 강조됩니다.
- mysqli 함수를 직접 사용하지 않고, 객체를 생성하여 매개변수를 바인딩하는 형식으로 SQL Injection 취약점을 보완했습니다.
- 기본적으로 bind_param() 메서드를 사용하나, 검색 환경과 같이 파라미터가 가변적인 경우에는 해당 함수를 사용할 수 없습니다.
- 이에, 이곳에서는 예외적으로 TypeScript(JavaScript)/PHP를 활용하여 Client-/Server-Side 모두에서 SQL Injection에 사용되는 특수문자를 걸러내는 방식으로 동작합니다.
- 허가되지 않은 사용자가 권한이 없는 페이지에 접속할 경우 403 Error를 내며 연결이 차단됩니다.
- COOKIE를 이용하여 Client-및 Server-side에서 사용자 정보를 관리합니다.
- 주소창에 적절하지 않은 ISBN을 입력한 경우 404 Error를 내며 접속을 차단합니다.
- root 계정을 사용하지 않고 새로운 server 계정을 사용하여 꼭 필요한 권한 외 다른 권한을 제거하였습니다.
- 모든 계정의 비밀번호는 SHA-256으로 안전하게 암호화되어 저장됩니다.
- 기본적으로 아래 요구/주의 사항을 잘 지키면 100점
- 최소한의 심미성 (페이지 구성, 폰트 크기, 색상, 위치 등)을 지키면 감점 없음
- 각 기능(데이터 삽입/수정/삭제/로그인/대여 또는 판매 여부 등) 별로 동작 (DB와의 연동) 여부 확인하여 미비한 부분에 대한 감점
- 데이터베이스 백업이 잘못된 경우 DB 파트 '0'점 처리되니 백업 후 반드시 테스트한 이후에 제출할 것 (테이블 구조 - create문, 실데이터 - insert 문)
- 제공된 Baseline 코드와 수업 시간에 다룬 기본 APM(아파치,PHP, MySQL) 기능 만을 이용한 경우가 아니라, 서버 설정이나 구성에 있어 꼭 필요한 내용이 있으면 반드시 Readme.txt 파일에 작성해서 함께 제출할 것.
- 가산점 (10점)
- 심미성 (단순하게 몇 개체에 CSS를 적용한 것이 아닌): 전체적으로 웹 어플리케이션의 완성도를 높이는데 기여했다고 판단했을 경우
- 보안: 보안 취약점 대처 방안
- 이외에 기본적으로 요구되는 기능이 포함되는 최소한의 페이지가 아닌 (단순히 페이지 수 늘리기가 아닌) 다양한 기능 구현 (포인트 적립, 우수고객 관리, 회원관리-취향?등에 대한 개인관리 등)
- Readme.txt 파일에 본인의 웹 애플리케이션에서 보안 취약점들을 위한 대처 방안에 대해 어떤 고민을 하고 기능을 구현 하였는지에 대해 함께 기술
- 티켓(영화, 공연 등) 예매 사이트
- 도서 대여 사이트
- 학사 관리 사이트
개인 과제이며, HTML Form(폼)을 통해 입력되는 데이터를 테이블 형태로 보여주고, 데이터베이스에 저장하고, 수정하고, 삭제할 수 있도록 다음의 조건을 만족 시키는 PHP 문서들을 작성하시오.
(text와 password는 2개로 인정하지 않고, 동일 form 객체로 인정함)
- text/password box (로그인 등에 사용)
- textarea
- checkbox (마이페이지에서 사용)
- radio button (검색창에서 사용)
- dropdown list = select/option tag (관리자용 책 정보 페이지에서 사용)
- 그 외 HTML5에서 사용되는 calendar 등 다른 입력 폼도 허용됨
- 회원가입 및 Login 페이지는 필수 (로그인 후, 회원 전용 페이지와 비회원 페이지 구별)
- 나머지는 주제와 관련된 페이지로 구성하되, 1~3번의 조건/요구사항을 만족하는 페이지로 구성한다.
예) 도서 대여 사이트인 경우, 비회원은 대여 불가하고, 전체 도서 목록만 열람 가능하며, 회원은 대여 가능
도서를 등록/수정/삭제하는 페이지가 필요하며, 회원이 도서 대여시 전체 도서 목록을 열람하는 페이지에서 "대여가능"->"대여불가"로 상태변경해서 보여주어야 함
- 반드시 Join과 Subquery를 각각 1번 이상 사용하여 query를 작성하고, 이를 결과로 보여주어야 함. (Join - 상세페이지, Subquery - 새로들어온 책)
- 수정/삭제 기능을 위해서 update와 delete 사용
- 테이블의 개수는 최소 4개 이상이어야 하며,
- 각 테이블 당 record의 개수는 최소 10개 이상
백업 받을 때, 다음과 같이 (학번.sql 파일) 형태로... // DB이름: test, Table이름: info 인 경우
C:\Users\Administrator>mysqldump -u root -p test info > 20221001.sql
백업 후 반드시 백업이 잘 되었는지 sql 파일을 메모장에서 확인할 것.
(반드시) 아래와 같이 테이블 생성 쿼리 및 저장 쿼리가 있어야 함.
CREATE TABLE `info` (
`id` varchar(15) NOT NULL,
`pwd` varchar(15) NOT NULL,
`name` varchar(20) NOT NULL,
`age` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `info`
--
LOCK TABLES `info` WRITE;
/*!40000 ALTER TABLE `info` DISABLE KEYS */;
INSERT INTO `info` VALUES ('admin','admin','administrator1',66);