Vue 의 기본 이스케이프나 자바스크립트 유효성 검사는 우회할 수 있습니다. 서버 쪽 검증이 항상 최종 방어선입니다.
${} 를 값에도 습관적으로 쓴다바인드 가능한 값은 항상 #{} 를 씁니다. ${} 는 컬럼명·테이블명처럼 바인드가 안 되는 자리에만, 화이트리스트와 함께 씁니다.
확장자는 클라이언트가 마음대로 붙일 수 있습니다. 매직 바이트까지 봐야 실제 파일 종류를 확인할 수 있습니다.
인증(누구인지)과 인가(이 데이터에 접근해도 되는지)는 다른 검사입니다. 상세 조회·수정 API 마다 소유자 검사를 별도로 넣어야 합니다.
엔티티에 isAdmin 같은 민감 필드가 있으면 요청 DTO 를 따로 만들어야 합니다. DTO 에 없는 필드는 바인딩 자체가 안 됩니다.
DB 예외 메시지에는 테이블·컬럼명이 그대로 담깁니다. 전역 예외 처리로 항상 정형화된 메시지만 내려줘야 합니다.
env, heapdump 는 비밀번호·세션 정보까지 노출할 수 있습니다. 운영 프로필에서는 필요한 엔드포인트만 남깁니다.
업로드 폴더에 실행 권한이 있으면 위조된 실행 파일이 그대로 돌아갈 수 있습니다. 업로드 폴더는 항상 실행 불가로 마운트합니다.