개요: 사용자가 자신의 의지와 무관하게 신뢰할 수 있는 웹사이트에 원치 않는 요청(HTTP POST, DELETE 등)을 보내도록 하는 공격
공격 대상: 서버
공격 목적: 권한을 도용해 요청 위조
공격 방법: 공격할 서버에 사용자가 로그인한 상태에서, 악의적인 요청을 발생시킬 수 있는 웹 페이지나 이메일 링크를 통해 공격
예시
사용자가 인터넷 뱅킹을 사용
그 사이트에 로그인한 상태에서 다른 탭에서 이메일을 통해 공격자가 만든 악성 웹페이지를 방문
이 페이지에는 사용자의 뱅킹 사이트에 송금 요청을 자동으로 보내는 폼이 숨겨져 있음
사용자는 모르는 사이에 이 요청을 전송
방어 방법
Referer 체크: HTTP 헤더에 있는 정보로 해당 요청이 요청된 페이지의 정보를 가지고 있음, 그라나 위조 가능
SameSite 쿠키 속성: 쿠키가 같은 사이트의 요청에만 전송되도록 설정하여 사용자를 보호
사용자 인증 요구: 중요한 요청에 대해 사용자의 비밀번호를 재확인하거나 2단계 인증을 요구
CSRF 토큰 사용: 민감 정보를 다룰 때 미리 토큰을 발행해 요청 검증
XSS (Cross-Site Scripting)
개요: 공격자가 사용자의 브라우저에서 실행될 수 있는 스크립트를 웹 페이지에 삽입하는 공격
공격 대상: 클라이언트
공격 목적: 세션 토큰 또는 다른 중요 정보를 탈취, 웹사이트 변조
공격 방법:
Stored XSS: 게시글, 댓글 등에 스크립트 코드 삽입
Reflected XSS:악성 스크립트를 포함시킨 URL(쿼리스트링에 포함)을 작성하여 희생자에게 전달
Reflected XSS 예시
사용자가 웹 사이트의 검색 폼에 "<script>alert('XSS');</script>"와 같은 스크립트를 입력
이 검색 결과 페이지가 사용자 입력을 검증 없이 그대로 반영하여 보여줄 때 가능
사용자가 이메일이나 메시지를 통해 받은 링크를 클릭할 때, URL의 파라미터로 "<script>alert('XSS');</script>" 같은 스크립트 포함시킴(http://example.com/search?query=<script>alert('XSS');</script>)
해당 링크 클릭 시 스크립트가 웹 페이지에서 실행
Stored XSS 예시
사용자가 포럼이나 블로그의 댓글에 "<script>alert('XSS');</script>"와 같은 스크립트를 남김
다른 사용자가 이 댓글이 포함된 페이지를 방문할 때마다 스크립트가 실행되어 세션 토큰이 탈취
방어 방법
입력 검증: 모든 사용자 입력을 적절히 필터링하여 스크립트 태그 같은 위험 요소를 제거
출력 검증: 데이터를 HTML로 출력하기 전에 인코딩을 적용하여 스크립트가 실행되지 않도록 함