1. 크로스 사이트 스크립팅? XSS?
‘크로스 사이트 스크립팅’이 무엇인가요?
취약한 동적 웹페이지에 악의적인 코드를 게시하여 다른 사용자의 PC에서 악성코드가 실행되게 하는 공격 수법을 크로스 사이트 스크립팅(XSS: Cross Site Scripting)이라고 합니다.
2. 크로스 사이트 스크립팅 XSS 종류
1) Reflected XSS
Reflected XSS는 사용자의 요청에 포함된 스크립트가 서버로부터 그대로 반사(Reflected)되어 응답메시지에 포함돼 브라우저에서 스크립트를 실행되는 공격기법. 변조된 URL로 사용자가 접속하도록 하는 방식.
2) Stored XSS
악성 스크립트가 서버측에 저장되어 사용자들의 요청이 있을때마다 저장된 스크립트가 사용자에게 응답되어 스크립트를 실행시키는 공격. 게시판에 글을 작성할때 악성스크립트를 포함하여 작성.
3) DOM Base XSS
DOM(Document Object Model)은 HTML의 요소들을 프로그램에서 제어할 수 있도록 객체화한 API로 페이지에 존재하는 요소(element)들의 논리적 구조와 해당 요소들에 접근할 수 있는 방법들을 정의해둔 것.
DOM-based XSS는 이렇게 DOM을 이용해서 요소들을 수정하거나 추가하는 등의 행위를 할 때 발생하는 XSS 취약점.
클라이언트측에서 DOM을 이용해서 동적으로 페이지를 조작할 때 발생하는 취약점.
3. 크로스 사이트 스크립팅 예제
쉽게 이해할 수 있도록 예를 들면, XSS공격은 아래와 같이 이루어짐.
1) 해커는 먼저 웹 게시판의 ‘글쓰기’ 처럼, 서버가 사용자의 입력을 받아들이는 부분에 악의적인 코드(악성 스크립트)를 입력합니다.
2) XSS에 취약한 사이트는 공격자의 입력을 그대로 저장하여, 다른 사이트 방문자가 이 악성 스크립트를 다운로드하고 실행할 수 있게 합니다.
3) 다른 사용자가 이 악성스크립트가 숨어있는 사이트에 접속하면 사용자는 대부분 화면상으로 이 악성 스크립트를 볼 수 없습니다. 하지만 사용자의 웹브라우저는 이를 자동으로 다운받고 해커가 작성한 악성 스크립트를 그대로 실행합니다.
4. 크로스 사이트 스크립팅(XSS) 방지 방법
서버의 경우, 사용자의 입력값에 대한 인수를 검사해 위험한 스크립트 문장을 입력할 수 없게 해야 합니다. PC 사용자의 경우, 가급적 신뢰할 수 있는 사이트만을 방문하며, 혹시 악의적인 스크립트가 다운로드 되더라도 이러한 코드의 실행이 제한 되도록 웹 브라우저 및 윈도우의 보안패치를 철저히 하여야 합니다.
javascript 방지 소스
function XSSCheck(str, level) {
if (level == undefined || level == 0) {
str = str.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,"");
} else if (level != undefined && level == 1) {
str = str.replace(/\</g, "<");
str = str.replace(/\>/g, ">");
}
return str;
}