Yunseok's Dev Blog

배운 것을 적는 블로그입니다.

Cross site scripting 란 무엇인가?

XSS가 무엇인가요?

Cross-site scripting (XSS)는 공격자가 악의적인 클라이언트 사이드 코드를 주입하는 것을 말합니다. 이 코드는 피해자에 의해 실행되고 공격자는 엑세스 제어를 우회하고 사용자인척해서 행동합니다. 악의적인 내용은 JavaScript뿐만 아니라 HTML, Flash 등 브라우저가 실행할 수 있는 어떤 코드가 될 수 있습니다.

Stored XSS Attacks

주입된 스크립트가 목표 서버에 저장된다. 희생자는 서버와 통신할 때 악의적인 스크립트를 서버로부터 받는다.

Reflected XSS Attacks

사용자가 악의적인 링크를 클릭하거나 특수하게 조작된 양식을 제출하거나 악의적인 사이트를 탐색하도록 속이는 경우, 삽입된 코드는 취약한 웹 사이트로 이동합니다. 웹 서버는 오류 메시지, 검색 결과 또는 요청의 일부로 서버에 전송된 데이터를 포함하는 기타 응답과 같이 주입된 스크립트를 사용자의 브라우저에 다시 반영합니다. 응답은 사용자가 이미 상호 작용 한 “신뢰할 수 있는”서버의 응답이라고 가정하기 때문에 브라우저는 코드를 실행합니다.

DOM-based XSS Attacks

페이로드는 원래 클라이언트 측 스크립트에서 사용하는 (환자의 브라우저에서) DOM 환경을 수정 한 결과로 실행됩니다. 즉, 페이지 자체는 변경되지 않지만 DOM 환경에 대한 악의적인 수정으로 인해 페이지에 포함된 클라이언트 쪽 코드가 예기치 않은 방식으로 실행됩니다.

왜 XSS를 할까요?

주로 쿠키 혹은 세션 같은 정보를 탈취하거나, 공격자가 컨트롤할 수 있는 웹페이지로 리다렉션 시키거나 취약한 사이트를 가장하여 사용자 시스템에서 다른 악의적인 작업을 수행합니다.

XSS는 어떻게 막을 수 있을까요?

웹 앱이 충분한 유효성 검사 또는 인코딩을 사용하지 않으면 이러한 공격이 성공합니다. 사용자의 브라우저는 악성 스크립트가 신뢰할 수 없음을 감지할 수 없으므로 쿠키, 세션 토큰 또는 기타 민감한 사이트 별 정보에 액세스하거나 악성 스크립트가 HTML 컨텐츠를 다시 쓸 수 있게합니다.

사이트 간 스크립팅 공격은 일반적으로 1) 신뢰할 수 없는 소스 (대부분 웹 요청)를 통해 데이터가 웹 응용 프로그램에 입력되거나 2) 동적 컨텐트가 악성 컨텐트에 대한 유효성 검사 없이 웹 사용자에게 전송될 때 발생합니다.

Sources