Infra & Security Eng/Database Engineering
인증 게시판 실습으로 이해하는 세션, SQL Injection, 3계층 구조 정리
엔지니어 E
2026. 4. 2. 18:36
반응형



브라우저
|
index.html
(진짜 첫 페이지 / 메뉴 링크 모음)
| | | | |
view.html content.html id.html insert.html del.html
(목록 화면) (회원가입 폼) (목록+로그인 처리) (글쓰기 폼) (삭제 확인 폼)
| | | | |
view.php content.php id.php insert.php del.php
(목록+ 로그인) (글 상세보기) (회원가입 처리) (글 작성 처리) (글 삭제)
| |
| |
conn.php login.php
(Oracle DB 연결(dal)) (세션 인증 처리)
| |
id 테이블ㅡㅡㅡㅡㅡ> board 테이블ㅡㅡㅡㅡㅡ> content 테이블
FK(id) FK(id)
3계층 구조 모든 웹 시스템의 기본
| 화면(HTML) → 로직(PHP) → 데이터(Oracle DB) |
세션 로그인 상태를 페이지 간에 유지하는 방법
session_start() // 세션 시작
$_SESSION["id"] = $id // 로그인 정보 저장
session_destroy() // 로그아웃 시 삭제
HTTP는 원래 페이지를 이동하면 기억을 못한다. 세션이 이걸 해결 해준다
GET vs POST
| GET → URL에 노출됨 (검색, 페이징, 글 번호 전달) POST → URL에 안 보임 (로그인, 글쓰기) |
SQL Injection 원리
| 정상 쿼리문 WHERE id = 'st15' AND pw = '...' 공격 후 WHERE id = 'st15' --' AND pw = '...' SQL Injection 입력창에 ' -- 넣으면 SQL 구조가 변해서 인증 우회가 된다 |
1차원 vs 2차원 페치
| 1차원 - oci_fetch_array() DB에서 결과를 한줄씩 가져온다 if($row = oci_fetch_array($result, OCI_ASSOC)){ // 한 행이 있으면 true $login = 1; } 2차원 - ocifetchstatement() DB 결과 전체를 한 번에 2차원 배열로 가져온다 $row_num=ocifetchstatement($result,$row); if($row_num==1){ $login=1; } |