3월 31일 부터 6주간 팀 프로젝트를 진행하게 되었다. 팀원과 프로젝트를 진행하며 첫 1주간은 가장 기본적인 CRUD의 구현을 목표하였고 회원가입과 로그인을 그동안 구현해본 적 없었기에 직접 코드를 작성 해보고 싶었다.
회원가입과 로그인 기능을 구현하며 로그인을 할 때 JWT 토큰 헤더와 쿠키에 담아서 보내는 두 가지 방법중 쿠키에 담아서 클라이언트로 보내는 방법을 선택했다. 헤더로 전송한다면 토큰 사용에 대한 제어 및 유연성이 올라가고, CSRF 공격과 같은 보안 위험을 피할 수 있다.
CSRF는 사이트 간 요청 위조(Cross-Site Request Forgery)로 불린다. 브라우저에서 웹사이트의 신뢰를 악용하는 공격 유형이며 이 공격은 악의적인 웹 사이트 또는 사용자가 알지 못하거나 동의 없이 다른 웹 사이트에서 작업을 수행하도록 속이는 공격자에 의해 시작된다. 공격자는 사용자가 이미 인증되었고 합법적인 웹 사이트에서 세션이 열려 있다는 사실을 이용할 것이다. CSRF 공격은 서버에서 생성되어 쿠키 또는 숨겨진 필드에서 사용자에게 전송되는 토큰 또는 임의 값을 사용하여 방지할 수 있다. 사용자가 양식을 제출하거나 링크를 클릭하면 원래 사용자에게 전송된 값과 일치하는지 확인하기 위해 서버에서 토큰을 확인하고 토큰이 없거나 일치하지 않으면 서버는 요청을 거부하여 CSRF 공격이 성공하지 못하도록 한다.
CSRF 공격의 위험이 있음에도 쿠키를 계획한 이유는 쿠키에 HttpOnly 플래그가 표시되어 스크립트가 쿠키에 액세스하지 못하도록 할 수 있다. 이것은 잠재적으로 JWT를 도용할 수 있는 XSS 공격을 방지하는데 도움이 되고 Secure 플래그를 쿠키에 설정해 암호화되지 않은 연결에서의 접근을 방지할 수도 있다.
XSS(Cross-Site Scripting)는 공격자가 합법적인 웹 사이트에 악성 코드를 주입한 다음 피해자의 브라우저에서 실행되도록 허용하는 웹 보안 취약점이다. 응용 프로그램이 사용자 입력을 웹에서 렌더링하기 전에 제대로 검증하지 않으면 발생하고 , XSS 공격은 로그인 자격증명, 개인정보 또는 금융 데이터와 같은 민감 정보를 훔친다.
프로젝트를 진행하며 기능적인 부분이나 다른 CRUD적인 부분을 더 챙겨야했나 라는 생각이 들기도 하지만 개발하는 과정에서 보안에대해 다시 한번 생각하게 되는 계기가 되었고 시야를 넓게 잡고 개발을 진행할 수 있게 된 것 같다.
'TIL' 카테고리의 다른 글
Redis의 문제점 (0) | 2023.04.25 |
---|---|
Mock & Mokito 테스트코드 (1) | 2023.04.17 |
포스트맨 이용한 카카오톡 로그인 테스트 - OAuth2 (0) | 2023.03.30 |
단위 테스트를 사용해야 하는 이유 - TDD (0) | 2023.03.29 |
개발자는 협업이 왜 중요하다는 건데 ? (0) | 2023.03.27 |