
304
3
부
방어
22.2
사용자 입력 정제
사용자 입력을 정제하는 데
innerText
와 같은 유용한 도구에 의존할 수 없을 수도 있다. 특
정
HTML
태그를 허용하되 다른 것을 차단하고자 하는 경우가 많다. 예를 들어
<
strong
></
strong
>
과
<
i
></
i
>
는 허용하되
<
script
></
script
>
는 차단하고자 할 수 있다. 이럴 때는 사
용자 제출 데이터를
DOM
에 주입하기 전에 확실히 검증하는 것이 좋다.
DOM
에 문자열을 주입할 때는 악의적인 태그가 포함되지 않았음을 확인해야 한다. 또한 정제
함수를 회피하는 시도가 없는지도 확인해야 한다.
예를 들어 정제기가 따옴표와 스크립트 태그를 차단한다고 하더라도 다음과 같은 이슈가 있을
수 있다.
<a href="javascript:alert(document.cookie)">클릭하세요</a>
DOM
이 워낙 방대하고 복잡한 명세이다보니 예상치 못하게 스크립트가 실행될 수 있는 경우
가 많이 있다. 위의 예는 자바스크립트 의사 스킴
pseudo
-
scheme
으로 알려진
URL
스킴으로 스크립
트 태그나 따옴표 없이도 문자열 실행을 허용한다.
이 방법을 다른
DOM
메서드에 적용하면, 심지어 따옴표에 대한 필터도 우회할 수 있다.
<a href="javascript:alert(String.fromCharCode(88,83,83))">클릭하세요</a> ...