XSS 취약점
사용자 입력 데이터를 그대로 반환할 경우, 악성 스크립트가 실행될 위험이 있음.
- 예방 방법:
- 입력값 검증 → <script> 같은 태그 필터링
- 출력 시 인코딩 → HTML 특수문자를 이스케이프 처리 (<, > 등)
- 입력값 길이 제한 → 예: 닉네임을 20자로 제한
외래키(Foreign Key)
- 데이터 무결성을 유지할 수 있음.
- 외래키로 연결된 데이터를 삭제할 때, 연관된 모든 데이터도 삭제해야 하는 문제 발생
- 외래키를 사용하지 않고, SQL JOIN으로 논리적으로 연결하여 관리
- 데이터 삭제 시, 직접 연관 데이터를 정리하는 쿼리를 실행
tabnabbing 공격
해커는 사용자에게 정상적인 링크를 제공하지만, 이를 클릭하면 해커 사이트로 이동하도록 유도
해커 사이트에서 로그인 창을 띄워 사용자가 직접 ID/PW를 입력하도록 유도하고, 이를 탈취
<a href='http://localhost:9999/404.html' target='_blank'>맛있게 먹는 영상</a>
게시판에 위와 같이 입력해놓고, 다른 사용자가 링크를 클릭하면 해커 사이트(404.html)이 실행. 이때, 현재 열린 원본 창을 해커 사이트(fake.html)로 변경
사용자는 원래 있던 사이트가 그대로 있다고 착각함
사용자가 로그인 폼을 입력하도록 유도. 사용자는 이 창이 정상적인 로그인 창이라고 착각하고 ID/PW를 입력함
토큰으로 로그인 유지
기존 문제 (JSESSIONID를 사용할 수 없는 문제)
- 프론트엔드(:5500)와 백엔드(:8080)이 서버가 다름 → CORS(Cross-Origin Resource Sharing) 이슈 발생
- JSESSIONID를 쿠키에 저장했지만, 다음 요청 시 자동으로 포함되지 않는 문제 발생→ 쿠키가 같은 도메인에서만 자동 전송되는 SameSite 정책 때문→ 해결 방법 중 하나: 세션 대신 JWT 같은 토큰 기반 인증을 사용
- 로그인 성공 시 이메일 기반으로 고유한 토큰을 생성하고 이를 저장
- 이메일 + salt를 SHA-256으로 해싱하여 토큰을 생성, DB에 저장
- 이후 요청에서 이 토큰을 검증하여 인증 처리
- 로그인 성공 시 닉네임과 토큰을 JSON 응답으로 반환
- 이후 프론트엔드는 Authorization 헤더에 토큰을 포함하여 요청
'[LG 유플러스] 유레카 > Today I Learned' 카테고리의 다른 글
[TIL][03.13] 패스워드 암호화, RESTful, Swagger UI (0) | 2025.03.14 |
---|---|
[TIL][03.11] 세션 & 토큰 로그인, 토큰 수명 관리 (0) | 2025.03.12 |
[TIL][03.07] 메모리 캐싱, SQL 인젝션, MyBatis, ConnetionPool (0) | 2025.03.10 |
[TIL][03.06] @CrossOrigin, WebMvcConfigurer, 쿠키, 세션 스토리지, 로컬 스토리지, fetch, axios, jwt (0) | 2025.03.07 |
[TIL][03.05] secu.properties, MVC, 자원 자동 해제, 의존성 주입, Http Session (0) | 2025.03.06 |