CS
[CS] XSS와 CSRF 비교
그레고리력
2021. 5. 6. 20:46
사이트 간 스크립팅(XSS: Cross-Site Scripting)
- 해커가 공격하려는 사이트에 스크립트를 넣는 기법, 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 발생
- 사용자의 정보(쿠키, 세션 등)가 탈취되거나, 비정상적인 기능을 수행하게 하거나 할 수 있음
- 주로 여러 사용자가 보게 되는 전자 게시판에 악성 스크립트가 담긴 글을 올리는 형태로 이루어짐
- 예를 들어 HTML이 포함된 내용을 게시할 수 있다면 문자의 크기와 색상을 바꿀 수 있는 등의 이점이 있지만 공격자의 의도대로 임의의 스크립트(간단한 프로그램)을 게시할 수도 있게 됨
- 공격자가 작업한 웹 사이트 게시물을 이용자가 조회하면, 취약점이 있는 다른 웹 사이트에 자동으로 스크립트가 게시되고 실행 됨
- 메일, 닉네임에 코드를 심기도 함
해결
- Secure coding 등(script문장 특수문자를 메타캐릭터로 변환)
- httponly 옵션 : 자바스크립트로 쿠키 접근 불가능
- innerHTML 사용하지 않기 = 사용자의 입력이 자바스크립트로 실행될 수 있는 코드 작성하지 않기
- 사용해야 한다면 XSS보안 라이브러리(sanitize-html, DOMPurify) 등 사용
종류
- Stored xss : 공격자가 제공한 스크립트가 서버에 저장된 후 지속적으로 다른 사용자에게 스트립트가 정상 사이트인것 처럼 노출되는 것
- reflected xss : db에 저장되지 않고 응답 페이지로 바로 사용자에게 스크립트가 전달됨(문자 url에 스크립트를 담아 보내는 방식)
사이트 간 요청 위조(CSRF: Cross-Site Request Forgery)
- 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격
- 과정 : 다른 사이트 조회, 스크립트가 포함된 응답(악의적 스크립트), 로그인 중인 SNS 등에 자동으로 원치 않는 게시, 자동으로 게시 완료
- XSS를 이용한 공격이 사용자가 특정 웹사이트를 신용하는 점을 노린 것이라면, CSRF(사이트간 요청 위조)는 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 것
해결
- CSRF token 사용
- Referer 검증(요청 온 사이트 도메인 검증)
- 재인증 요구
- same site 옵션(같은 도메인 요청에만 쿠키를 전송)
XSS와 CSRF의 차이
- XSS는 공격대상이 Client이고, CSRF는 Server
(XSS는 사이트변조나 백도어를 통해 클라이언트에 대한 공격, CSRF는 요청을 위조하여 사용자의 권한을 이용해 서버 공격)
참고
- CORS란?
- 메모리 영역의 초과를 악용하기도 함(C나 C++등의 스택오버플로우, 힙 오버플로우 등)