- 개념
- 공격자가 사용자의 인증된 세션을 악용해서, 사용자가 의도하지 않은 요청을 서버에 보내게 만드는 공격
- 특징
- 세션 기반 인증에서 주로 발생
- 공격자는 쿠키 자체를 훔치지 않아도 됨 → 브라우저가 자동으로 쿠키를 보여줌
- Get/POST 모두 가능하지만, POST/상태 변경 요청에서 더 위험
- 핵심
- 사용자가 이미 로그인된 상태라는 점을 악용함
- 동작 원리
- 사용자가 은행 사이트에 로그인
- 세션 쿠키가 브라우저에 저장됨
- 공격자가 악성 사이트를 방문하도록 유도 → 공격자 페이지에서 <img>나 <form>등을 이용해 은행 사이트로 요청 전송
- 브라우저는 쿠키를 자동으로 첨부 → 서버는 정상적인 요청으로 처리
- 결과는 공격자가 의도한 거래나 정보 변경 발생
- 방어 방법
- CSRF 토큰 사용
- 서버가 랜덤 토큰을 발급 → 폼/요청 헤더에 포함 → 서버에서 검증
- 요청을 변조한 공격자는 토큰을 알 수 없기 때문에 차단 가능
- SameSite 쿠키
- SameSite-lan 또는 Strict 설정 → 외부 사이트에서 쿠키 자동 전송 방지
- Custom Header
- AJAX 요청 시, X-Requested-With 같은 헤더를 서버에서 검증
- JWT/토큰 기반 인증
- 세션 쿠키를 사용하지 않고 Authorization 헤더로 전달 → 브라우저가 자동 첨부하지 않음 → CSRF위험 감소
@Id
- 해당 필드를 엔티터의 기본 키로 지정
- RDB 테이블에서 PRIMARY KEY 역할
- 엔티티는 반드시 하나 이상의 @Id가 필요
- 특징
- PK 지정, 엔터티 구분 기준
- 장점
- JPA가 객체 테이블 매핑 시 엔티티 식별 가능
- 단점
- 없으면 엔티티 저장 불가 (필수임)
@Entity
public class User{
@Id
private Long id; // PK
private String name;
}