공공부하자개발 · 영어 학습 노트
자바
실무 확장Excel · 파일 업로드 · DB 연동0/22 완료
  • 01Excel(XLSX) 구조와 순수 JDK로 읽기/쓰기
  • 02Apache POI로 Excel 업로드/다운로드
  • 03파일 업로드/다운로드 서버 (HttpServer)
  • 04JDBC 기초와 트랜잭션 (H2)
  • 05MyBatis 어노테이션 매퍼로 쿼리 연동
  • 06MyBatis XML 매퍼 · Oracle 방언 · PageHelper · Spring Boot
  • 07REST API 서버와 JSON
  • 08Vue 3 SPA 와 Java 서버 연동
  • 09@Scheduled 운영
  • 10로깅 실무: 레벨·계층, MDC 추적, 예외·성능, 마스킹, 롤링, JSON 로그
  • 11외부 API 연동
  • 12테스트 실무
  • 13암호화·개인정보 보호
  • 14인코딩·한글 실무
  • 15@Transactional 심화
  • 16긴 작업 비동기 처리와 진행률
  • 17SFTP·FTP 파일 연계
  • 18로컬 캐시와 @Cacheable
  • 19메일·알림 발송
  • 20웹 보안 체크리스트
  • 21빌드 도구와 폐쇄망 의존성 반입
  • 22성능 측정: p50·p95·p99, 측정 계층, JFR, JMH 함정, 자체 부하 테스트, 병목 순위
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 실무 확장 › 20 / 22

웹 보안 체크리스트

XSS·CSRF·SQL 인젝션·경로 탐색·업로드·IDOR·보안 헤더·의존성 취약점
섹션 7진행 0 / 22
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

5. 자주 하는 실수 (Tip)

실수 1: 프런트만 막으면 된다고 생각한다

Vue 의 기본 이스케이프나 자바스크립트 유효성 검사는 우회할 수 있습니다. 서버 쪽 검증이 항상 최종 방어선입니다.

실수 2: ${} 를 값에도 습관적으로 쓴다

바인드 가능한 값은 항상 #{} 를 씁니다. ${} 는 컬럼명·테이블명처럼 바인드가 안 되는 자리에만, 화이트리스트와 함께 씁니다.

실수 3: 확장자만 보고 업로드를 허용한다

확장자는 클라이언트가 마음대로 붙일 수 있습니다. 매직 바이트까지 봐야 실제 파일 종류를 확인할 수 있습니다.

실수 4: 로그인 여부만 확인하고 소유권을 확인하지 않는다

인증(누구인지)과 인가(이 데이터에 접근해도 되는지)는 다른 검사입니다. 상세 조회·수정 API 마다 소유자 검사를 별도로 넣어야 합니다.

실수 5: 엔티티를 요청 바인딩에 그대로 쓴다

엔티티에 isAdmin 같은 민감 필드가 있으면 요청 DTO 를 따로 만들어야 합니다. DTO 에 없는 필드는 바인딩 자체가 안 됩니다.

실수 6: 예외 메시지를 그대로 클라이언트에 보낸다

DB 예외 메시지에는 테이블·컬럼명이 그대로 담깁니다. 전역 예외 처리로 항상 정형화된 메시지만 내려줘야 합니다.

실수 7: 개발 편의로 열어둔 actuator 를 운영에 그대로 배포한다

env, heapdump 는 비밀번호·세션 정보까지 노출할 수 있습니다. 운영 프로필에서는 필요한 엔드포인트만 남깁니다.

실수 8: 업로드 저장 경로에 실행 권한을 준다

업로드 폴더에 실행 권한이 있으면 위조된 실행 파일이 그대로 돌아갈 수 있습니다. 업로드 폴더는 항상 실행 불가로 마운트합니다.

자주 하는 실수 (Tip)
  • 실수 1: 프런트만 막으면 된다고 생각한다
  • 실수 2: ${} 를 값에도 습관적으로 쓴다
  • 실수 3: 확장자만 보고 업로드를 허용한다
  • 실수 4: 로그인 여부만 확인하고 소유권을 확인하지 않는다
  • 실수 5: 엔티티를 요청 바인딩에 그대로 쓴다
  • 실수 6: 예외 메시지를 그대로 클라이언트에 보낸다
  • 실수 7: 개발 편의로 열어둔 actuator 를 운영에 그대로 배포한다
  • 실수 8: 업로드 저장 경로에 실행 권한을 준다
이전 섹션4 응용 변형 예제5 / 7다음 섹션6 연습 문제