어제 입사를 희망했던 회사 면접을 보고, 면접에 나왔던 내용이다.
최종 프로젝트 관련하여 질문을 받았는데, 로컬 스토리지에 쿠키를 저장하는 방식을 보시고 XSS를 아시냐고 나에게 질문해주셨다.
정말 솔직하게 처음들어보는 용어였고, 그래서 CSS로 들어버렸다.
그런데 CSS가 로컬 스토리지랑 관련이 있나..? 싶어서 한 번 더 여쭙게 되었고, 결과적으로 XSS에 대해 한 마디도 하지 못했다.
XSS 너란 녀석 무엇인지 한 번 간략하게 알아보자.
SQL injection이란?
XSS - Cross Site Scripting
SQL injection과 함께 웹에서 가장 기초적인 취약점 공격 방법의 일종. 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법을 말한다.
가장 기초적인 취약점 공격 방법의 일종이라고 한다.
Cross-Site Scripting (이하 XSS)의 특징은 아래와 같다.
XSS 공격은 2000년도에 최초로 발견되었다고 한다.
'리그 오브 레전드'라는 게임에서도 자바스크립트를 이용한 공격이 등장했다고 한다..
웹에서 빠질 수 없는 자바스크립트이기 때문에, 없어지지 않는 취약점 중에 하나라고 볼 수 있다고 한다.
공격 방법은 Stored XSS와 Reflected XSS가 있다.
Cross Site Scripting(XSS)는 공격방법이 단순하고 가장 기초적이지만, 많은 웹사이트들이 XSS에 대한 방어 조치를 해두지 않아 공격을 받는 경우가 많다.
여러 사용자가 접근 가능한 게시판 등에 코드를 삽입하는 경우도 많으며, 경우 에 따라서 이메일같은 매체를 통해서도 전파된다고 한다.
사이트 게시판이나 댓글, 닉네임 등 스크립트가 서버에 저장되어 실행되는 방식
보통 URL 파라미터(특히 GET 방식)에 스크립트를 넣어 서버에 저장하지 않고 그 즉시 스크립트를 만드는 방식.
해당 공격 방식의 경우 브라우저 자체에서 차단하는 경우가 많아서 상대적으로 공격 성공률이 낮다.
보통 해커의 홈페이지에 PHP 파일을 만든다.
그 뒤에 공격할 사이트에 스크립트를 심은 뒤, 스크립트가 심어진 페이지를 사용자가 볼 경우, 쿠키값이 해커의 홈페이지로 넘어가서 세션 하이재킹이 가능해진다.
- 해커 홈페이지를 만들어 놓는다.
- 스크립트를 심을 페이지를 탐색 후, 스크립트를 심는다.
- 사용자가 스크립트가 심어진 페이지를 보게되어 XSS 공격이 실행.
- 쿠키값이 해커의 홈페이지로 넘어가서 세션 하이재킹이 가능해짐.
사용자로부터의 입력값을 검증하고, 안전하지 않은 문자나 문자열을 이스케이프하여 안전한 형태로 출력합니다.
입력값 검증
은 서버 측에서 이루어져야 하며, 예상되는 형식과 길이, 유효한 문자 등을 확인하여 안전하지 않은 입력을 걸러낸다.<
, >
, &
, "
, '
등을 대체 문자열로 변환하는 htmlSpecialChars 함수가 있다.CSP는 웹 응용 프로그램이 로드하는 리소스의 정책을 명시하는 보안 표준입니다.
<meta>
태그를 사용하여 지정할 수 있습니다.입력값 검증 및 이스케이핑
, 콘텐츠 보안 정책, CSP
는 XSS 공격을 방어하기 위한 대표적인 방법이다.
이 방법들은 웹 애플리케이션의 보안을 강화하는 데 매우 효과적이다.
입력값 검증 및 이스케이핑
XSS
공격 방지이것은 기본적인 보안 관행이며, 신뢰할 수 없는 데이터를 처리하는 모든 부분에서 적용된다.
콘텐츠 보안 정책, CSP
<meta>
태그를 통해 구현 가능.