1. CSRF (Cross-Site Request Forgery)
- CSRF는 사용자가 의도하지 않은 요청을 서버로 전송하도록 속이는 공격입니다. 로그인 상태의 사용자를 대상으로 악성 요청을 실행할 수 있어 보안에 매우 위험합니다.
- ex. 사용자가 은행 웹사이트에 로그인한 상태에서 악성 링크를 클릭하면, 공격자가 사용자 계정으로 돈을 송금하는 요청이 전송될 수 있습니다.
1. Spring Security의 CSRF 방지
- Spring Security를 사용하면 CSRF 보호가 기본으로 활성화됩니다.
- POST, PUT, DELETE 등의 요청 시, CSRF 토큰을 요구합니다.
2. 예시
<form action="/submit" method="post">
<input type="hidden" name="_csrf" value="1a2b3c4d5e6f7g8h9i0j">
<button type="submit">Submit</button>
</form>
- name="_csrf": 서버에서 지정한 CSRF 토큰의 파라미터 이름
- value="1a2b3c4d5e6f7g8h9i0j": 서버가 생성한 고유 토큰 값
2. X-Frame-Options 헤더
- 웹 페이지가 다른 사이트의 iframe에서 로드되지 않도록 방지하는 HTTP 응답 헤더입니다.
- iframe : HTML 문서 안에 다른 HTML 페이지를 삽입할 수 있는 태그입니다.
1. 특징
- 클릭재킹(Clickjacking) 공격을 막기 위해 사용됩니다.
- 클릭재킹이란 사용자가 의도하지 않은 버튼이나 링크를 클릭하도록 속이는 공격입니다.
- ex. 공격자가 자신의 웹사이트에 은행의 로그인 페이지를 iframe으로 삽입한 뒤, 투명한 버튼을 겹쳐서 사용자가 클릭하도록 유도합니다.
2. 예시
@Override
protected void configure(HttpSecurity http) throws Exception {
http.headers(headers -> headers
.frameOptions(frameOptions -> frameOptions.sameOrigin())); // 같은 도메인에서만 iframe 허용
}
- SAMEORIGIN : 같은 도메인에서만 iframe으로 로드 가능
- DENY : iframe 로드를 완전히 차단
BCryptPasswordEncoder
- 비밀번호를 안전하게 저장하기 위해 사용하는 해시 함수입니다.
- Salt(랜덤 데이터)를 추가해 동일한 비밀번호라도 서로 다른 암호화 결과를 생성합니다.
- 암호화는 단방향으로만 동작하며, 원래 비밀번호를 복구할 수 없습니다.
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
PasswordEncoder 인터페이스
- 비밀번호를 암호화하거나, 사용자가 입력한 비밀번호와 암호화된 비밀번호를 비교하는 역할을 합니다.
1. 주요 메서드
- encode(String rawPassword) : 평문 비밀번호를 암호화
- matches(CharSequence rawPassword, String encodedPassword) : 입력한 비밀번호와 저장된 암호화 비밀번호가 일치하는지 확인
2. 예시
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String encodedPassword = passwordEncoder.encode("myPassword");
boolean matches = passwordEncoder.matches("myPassword", encodedPassword); // true
출처
OpenAI의 ChatGPT (https://openai.com)
'Java Framework > Spring Security' 카테고리의 다른 글
@AuthenticationPrincipal (0) | 2025.04.11 |
---|---|
[Spring Security] 역할 기반 접근 제어 (RBAC) feat. Role (0) | 2025.02.16 |
[Spring Security] 스프링 세큐리티 (Spring Security) (1) | 2025.02.11 |