<input>태그 안에 입력값을 받는 경우 |
|---|
1. ">를 이용하여 input 태그 탈출후 다른 태그 사용 |
| 2. Event Handler 사용 |
ex) onload, onclick, onmouseover |
| - onmouseover: 커서가 해당 태그위에 올라가면 실행 |
-- ex) <input type = "text"> |
| - onfocus: 커서가 브라우저안에 들어오면 실행 |
| - autofocus: 커서가 자동으로 브라우저 안에 들어옴 |
-- ex) <input type = "text" autofocus="alert(1)"> |
XSS 대응방안
- HTML Entity
1.보통의 경우
| HTML Entity |
|---|
HTML 특수문자 < ' " >를 치환시킴 |
우회법: DOMbased XSS 입력값이 script안에 있으면 script 삽입 |
ex) let data = "__" __ <- 입력받는곳 |
"; alert(1); let a = " <-입력받는 곳에 대입 |
";앞에 스크립트 완성 |
alert(1)내가 심고 싶은 코드 |
let a = " 뒤에 스크립트 완성 |
| -> 스크립트가 미완성일 경우 스크립트가 실행되지 않음 |
2.치환이 불가능한 경우
--> HTML Editor환경에서는 HTML Entity가 불가능
--> 따라서 꼭 필요한 경우가 아니라면 보통은 삭제를 추천
| HTML Editor 환경일 경우 |
|---|
| 1. 파라미터(사용자 입력)에서 HTML 특수 문자들을 전부 HTML Entity로 치환 |
ex) <img> -> < img > |
2. 허용해줄 tag 식별 -> 그 태그를 다시 기능하도록 바꿈 |
ex) < img >, < a > 등 이렇게 치환된 tag를 식별하여 <img>, <a>태그로 다시 살림 |
3. 다시 치환한 tag내 악의적인 Eevent handler 블랙리스트 기반 필터링 |
ex) <img> 태그내 src 허용 onerror필터링 |
- Filtering
1. White List Filtering
--> 기능 : 특정단어만 받아드림
--> 한계 : 모든 곳에 Filtering을 해버리면 의미가 없어지는 곳도 있음 ex)게시판
2. Black List Filtering
--> 기능 : 특정단어만 Filtering함
--> 한계 : 우회가능성이 존재함
--> 종류
| 글자수 제한 |
|---|
| 기능: 스크립트를 입력하기 힘들게 글자수 자체를 제한 |
우회법: <script src ="">를 이용해 외부에서 가져옴 |
| 단어 제한 |
|---|
| 기능: 특정단어를 Filtering함 |
| 우회법: |
1. 대소문자를 섞음 ex) <script>-><ScRIpT> |
2. 다른 태그 사용 ex) <a>, <img>, <input> |
--Normaltic Study 11주차--