프로젝트 검수 시, input값에 스크립트가 실행되는 경우 수정요청이 올 때,
어떻게 수정을 해야할 지 고민하다가 검색을 하다보니 XSS라는 공격 기법을 알게 되고 XSS방어를 해야하겠다는 깨달음을 얻은 날.
XSS(Cross-site Scripting)란?
크로스 사이트 스크립팅이란 이름답게, 자바스크립트를 사용하여 공격하는 경우가 많다. 공격 방법이 단순하고 가장 기초적이지마느 많은 웹사이트들이 XSS에 대한 방어 조치를 해두지 않아 공격을 받는 경우가 많다. 여러 사용자가 접근 가능한 게시판 등에 코드를 삽입하는 경우도 많으며 경우에 따라서는 메일과 같은 매체를 통해서도 전파된다. 심지어는 닉네임에 코드를 심기도 한다.
스크립트 태그 : 스크립트 태그로 자바스크립트를 실행한다.
ex) <script>alert('XSS');</script>스크립트 태그의 스크립트를 실행시킨다. 매우 정직한 방법이라 대부분의 사이트에서 막는 경우가 많다. 브라우저단에서 필터링 해주는 경우도 있다.
자바스크립트 링크 : 링크 태그로 자바스크립트를 실행한다.
ex) <a href="javascript:alert('XSS')">XSS</a>브라우저에서 about: 링크와 같이, javascript:로 시작하는 링크는 스크립트를 실행시킨다. 스크립트 태그와 같이, javascript:를 필터링하는 경우가 많아 많은 사이트에서는 막는다.
이벤트 속성 : 이벤트 속성을 사용한다.
ex) <img src="#" onerror="alert('XSS')">이벤트 속성으로 스크립트를 실행할 수 있다. 주로 on으로 시작하는 속성이 이벤트 속성이다. 자주 사용되는 이벤트 속성으로는 onload / onerror onclick등이 있다. 물론, 이 방법 역시 '자바스크립트 링크'방법만큼 많이 막혔다.
위에 방법 이외에도 XSS공격은 더 있다. 아래의 URL를 확인하면 된다. 나무위키에서 작성되어 있는 내용처럼 일반 사이트들은 보편적으로 XSS를 차단한다고 하지만 생각보다 가입자가 몇만명이 넘는 사이트여도 보안에 취약한 사이트하여 개인정보가 뚫리는 경우도 있는 점을 명심해야한다.
개인적인 견해로는 개발 할 때, 어느정도 기본적인 보안지식을 가지고 보안을 챙기며 개발을 하는 것이 맞다고 생각이 든다. 개발을 하다보면 시간적 여유가 없어 보안에 대한 부분은 고려하지 않고 개발하여 사이트를 오픈하고 운영하게 되었을 때 큰 코 다치는 경험을 할 수 있을 것이다.
XSS - 나무위키
XSS는 데이터를 입력할 때와 출력할 때, 모두 필터링하고, 클라이언트에도 막을 수 있을만한 수단을 구성해놓는 것이 좋다. 보안은 한없이 덧대도 끝이 없고, 아래 서술한 방식으로 구성해도 기
namu.wiki
OWASP에서 XSS공격을 방지하는 7계명
- 허용된 위치가 아닌 곳에 신뢰할 수 없는 데이터가 들어가는 것을 허용하지 않는다.
- 신뢰할 수 없는 데이터는 검증을 하여라.
- HTML속성에 신뢰할 수 없는 데이터가 들어갈 수 없도록 하여라.
- 자바스크립트에 신뢰할 수 없는 값이 들어갈 수 없도록 하여라.
- CSS의 모든 신뢰할 수 없는 값에 대해서 검증하여라
- URL파라미터에 신뢰할 수 없는 값이 있는지 검증하여라.
- HTML코드를 전체적으로 한번 더 검증하여라.
XSS 공격 방어 방법
사용자의 입력에 대해서는 무조건 의심을 하고 검증하는 작업이 필요합니다. 즉, 스크립트 등 해킹에 사용될 수 있는 코딩에 사용되는 입력 및 출력 값에 대해서 검증하고 무효화시켜야 하는데요. 입력 값에 대한 유효성 검사는 데이터가 입력되기 전에 가능하면, 입력 데이터에 대한 길이, 문자, 형식 및 사업적 규칙 유효성을 검사해야 합니다.
쿠키의 보안 옵션 사용
쿠키 생성시 '보안 쿠키'라는 파라미터를 지정하면 TLS상에서만 사용하게 할 수 있으며, 'HTTP ONLY'라는 파라미터로 웹 브라우저상에서만 쓸 수 있게 할 수도 있다. 물론 완전히 방어가능은 아니다.
콘텐츠 보안 정책(Content Security Policy, CSP)사용
스크립트 실행에 대한 정책(조건)을 설정해 알 수 없는 스크립트가 실행되는 것을 예방할 수 있다. 원래는 외부 서버의 스크립트 파일이 script태그나 iframe등 사이트에 로드가 되면 스크립트가 실행되지만 CSP를 설정해 출처가 자기 서버인 스크립트만 실행되도록 할 수 있다. 물론 이는 어디까지나 완전 방어가 아닌 예방의 차원이라는 것을 알아둬야한다.
JAVA로 XSS방법은 아래 블로그를 참고.
input태그에 스크립트 방지하는 방법(XSS 방지)
프로젝트 테스트기간이라 몇가지 수정해달라는 요청받았다.엑셀로 받았는데 수정사항 내용이 글제목에 태그가 입력됨. 으로 왔길래 무슨 말일까 고민하고있었다.팀장님이 “XSS방어하면 돼요~
sowon-dev.github.io
'etc.' 카테고리의 다른 글
[보안] ClamAV 리눅스 백신 (0) | 2023.10.16 |
---|---|
[git] git stash - 커밋하지 않고 변경사항 저장하기 (매우 유용) (0) | 2023.05.22 |
[리눅스] SNMP 망 관리 프로토콜 (0) | 2023.05.09 |
Spring + NextJS 개발환경 연동할 때 생기는 이슈! (1) | 2022.11.25 |
웹 브라우저에서 임시로 화면 변경하기 / 디자인 모드 Design Mode ? (0) | 2022.07.18 |
댓글