티스토리 뷰

카테고리 없음

csrf란

eyoadgkn 2024. 6. 19. 01:44

 

소셜로그인 Security 공부를 하다가 클래스에 @Configuration 지정을 하고 빈을 등록하는 과정 중에 csrf라는 단어를 만나 궁금해서 찾아보게 되었습니다.

CSRF(Cross-Sitr Request Forgery)

웹 애플리케이션의 보안 취약점 중 하나로써 사용자의 인정된 세션을 이용해 악의적인 요청을 보내는 공격 기법을 뜻합니다.

사용자가 웹 사이트에 로그인하면 세션 정보가 생성됩니다.
공격자가 사용자를 속여 악의적인 요청(예: 계좌 이체, 비밀번호 변경 등)을 보내도록 합니다.
웹 서버는 사용자의 세션 정보가 유효하다고 판단하여 요청을 처리합니다.
결과적으로 사용자의 의도와 상관없이 공격자의 목적이 달성됩니다.
CSRF 공격을 방지하기 위해서는 CSRF 토큰을 사용하는 것이 일반적인 방법입니다.
CSRF 토큰은 서버에서 생성된 랜덤한 토큰 값으로, 클라이언트의 요청에 포함되어 서버에서 검증됩니다.

 

 

<!-- HTML 폼 -->
<form action="/transfer" method="post">
    <input type="hidden" name="_csrf" value="${csrfToken}">
    <label for="amount">금액:</label>
    <input type="number" id="amount" name="amount" required>
    <button type="submit">계좌 이체</button>
</form>
// Java 서버 코드
@Controller
public class TransferController {
    @GetMapping("/transfer")
    public String showTransferForm(Model model, HttpServletRequest request) {
        String csrfToken = CsrfTokenGenerator.generateToken();
        model.addAttribute("csrfToken", csrfToken);
        request.getSession().setAttribute("_csrf", csrfToken);
        return "transfer-form";
    }

    @PostMapping("/transfer")
    public String processTransfer(@RequestParam("amount") double amount,
                                  @RequestParam("_csrf") String csrfToken,
                                  HttpServletRequest request) {
        // 세션에서 저장된 CSRF 토큰과 요청 파라미터의 CSRF 토큰을 비교
        String sessionCsrfToken = (String) request.getSession().getAttribute("_csrf");
        if (sessionCsrfToken != null && sessionCsrfToken.equals(csrfToken)) {
            // CSRF 토큰 검증 성공, 계좌 이체 로직 실행
            // ...
            return "transfer-success";
        } else {
            // CSRF 토큰 검증 실패, 에러 처리
            return "transfer-error";
        }
    }
}

 

HTML 폼에 CSRF 토큰을 hidden 필드로 추가하고, 서버 측에서 CSRF 토큰을 생성하여 세션에 저장합니다.
클라이언트의 요청 시 CSRF 토큰을 검증하여 공격을 방지합니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함