반응형 CSRF4 웹 보안 기초 — XSS, CSRF, SQL Injection 방어 실전 왜 이 글을 쓰나보안 취약점은 "나는 괜찮겠지"라고 생각하다가 터진다.실무에서 실제로 마주친 케이스들이다.게시판 댓글에 서버가 q 파라미터를 이스케이프 없이 HTML에 출력하면 스크립트가 실행된다.저장형 XSS:// 게시판 댓글 입력댓글을 DB에 저장하고 다른 사용자 화면에 그대로 출력하면 그 페이지를 여는 모든 사용자가 피해를 입는다.DOM 기반 XSS:// 취약한 코드 — URL 해시를 직접 innerHTML에 삽입document.getElementById('msg').innerHTML = location.hash.slice(1);// 공격 URLhttps://example.com/page#방어 1: 출력 이스케이프HTML로 렌더링되는 모든 사용자 입력값은 반드시 이스케이프한다.// utils/esc.. 2026. 3. 19. [PHP] 파일 업로드 시스템 만들기 — 다중 업로드, 파일 교체, 다운로드 스트리밍 왜 만들었나지금까지 PHP로 로그인, 게시판, REST API를 만들었다. 그런데 실제 서비스에서 빠지지 않는 기능이 하나 있다. 파일 업로드다. 단순히 $_FILES로 받아서 저장하면 되는 것 같지만, 실제로는 주의해야 할 것들이 꽤 있다.MIME 타입을 클라이언트 제출값이 아니라 서버에서 직접 검사해야 한다저장 파일명을 원본 그대로 쓰면 경로 조작 공격에 노출된다다중 파일 업로드 시 $_FILES 배열 구조가 직관적이지 않다파일 교체는 기존 파일 삭제 + 새 파일 저장 + DB 업데이트가 원자적으로 돼야 한다이 튜토리얼은 다중 파일 업로드, 파일명 수정 + 선택적 파일 교체, 다운로드 스트리밍, 삭제까지 완전한 파일 관리 시스템을 구현한다.기술 상세아키텍처28-php-file-upload/├── db.. 2026. 3. 5. [PHP] 게시판 CRUD 만들기 — SQLite, CSRF 방어, 소유권 검사, 페이지네이션 왜 만들었나지난 글에서 PHP 로그인/회원가입 시스템을 만들었다. 그런데 인증만 있고 정작 뭔가를 올릴 곳이 없으니 반쪽짜리였다. 게시판은 웹 개발의 가장 고전적인 CRUD 예제이면서도, 실전에서 반드시 부딪히는 패턴들이 압축돼 있다.인증된 사용자만 쓸 수 있는 기능 (작성/수정/삭제)남의 글을 못 건드리게 하는 소유권 검사CSRF 공격 방어페이지네이션 (글이 많아지면 한 번에 다 보여줄 수 없다)SQLite를 그대로 쓰고 MySQL로 전환할 때는 DSN 한 줄만 바꾸는 구조로 설계했다.기술 상세아키텍처26-php-board/├── db.php # PDO 싱글턴, 테이블 auto-create├── auth.php # 세션, CSRF, current_user()├── header.php .. 2026. 3. 4. [PHP] 로그인/회원가입 시스템 만들기 — PDO SQLite, 세션, CSRF 방어 왜 만들었나인증 시스템은 모든 웹 앱의 기본이다. 직접 구현해보면 세션이 어떻게 동작하는지, 비밀번호를 왜 해시로 저장해야 하는지, CSRF 공격이 무엇인지 체감할 수 있다.PHP는 세션 관리, DB 연동, 폼 처리를 기본으로 제공한다. 이번 튜토리얼은 MySQL 서버 없이 SQLite + PDO로 구현한다. 파일 하나로 DB가 되기 때문에 서버 설정 없이 php -S로 바로 실행할 수 있다.앱 구조25-php-login/├── index.php # 진입점 (로그인 여부에 따라 리다이렉트)├── register.php # 회원가입 (GET: 폼, POST: 처리)├── login.php # 로그인 (GET: 폼, POST: 처리)├── dashboard.php # 보호된.. 2026. 3. 4. 이전 1 다음 반응형