오늘은 XSS(크로스 사이트 스크립팅) 취약점에 대한 대응방안을 알아보겠습니다.
사실 이 내용은 저번 'XSS 기법' 게시글에서도 간단히 했지만 덧붙이고 싶은 내용이 있기에 따로 포스팅 합니다.
<지난 게시물>
https://jamesbexter.tistory.com/entry/XSSCross-site-scripting%EA%B8%B0%EB%B2%95
1. HTML Entity
XSS 에 사용되는 주요 특수문자 < > ' " 등을 전부 HTML Entity 로 바꾸는것입니다.
페이지에선 특수문자로 보이지만 스크립트 상으로는 < 같은 다른 문자로 바뀌게되어 스크립트 삽입을 막는것입니다.
<XSS 에 사용되는 주요 특수문자 10가지의 Entity>
2. 블랙 리스트 기반 필터링
= 특정 단어를 못들어오게 막는 것입니다.
하지만 이 기법은 우회될 가능성이 존재합니다.
아직 발견이 안됐을뿐 우회할 수 있는 가능성이 무궁무진 하기때문에 위험합니다.
블랙리스트 필터링을 우회하는 방법으로는
1. 대소문자 혼용
만약 <script> 라는 단어 자체를 필터링해놓았다?
= <ScRipT>alert(1);</Script> 이런식으로 대소문자를 혼용하여 우회할 수가 있습니다.
2.단어필터링
만약 script 라는 단어를 공백으로 처리하게 해놓았다?
= <scrscriptipt> 이런식으로 작성하게 되면 script는 공백처리가되어 <script>만 남게된다.
3.script => xript 이런식으로 바꿔버린다면?(단어필터링 인데 공백이 아님)
= 다른태그를 통해서 <script> 를 대체할수 있다. 예를 들어 <img> 태그는 웬만하면 막아두지 않기때문에 가능!
:<img src=x onerror="alert(1);"> ..... 이벤트 핸들러를 사용하면 된다.(onload , onclcik, onmouseover....)
4.href 태그를 통해서도 자바스크립트 코드를 삽입할 수 있다.
= <a href="javascript:alert(1)">TEST</a>
5.1 < , > 꺽쇠를 금지한다면?
<script>
var data ="__입력값__"
</script>
이런식으로 스크립트안에 우리가 입력하는 입력값이 들어가는경우라면 밑의 예시처럼 우회가 가능하다.
입력값 : "; alert()1; var a="
<script>
var data=""; alert(1); var a="";
</script>
◎ 혹은 다른경우로 이벤트 핸들러를 사용할수도 있다.
<html>
<input type="text" value="_입력값_">
</html>
이런식으로 input 태그안에 우리의 입력값이 들어가는경우엔
입력값: " onfocus="alert(1);" autofocus="
결과 : <input type="test" value="" onfocus="alert(1);" autofocus="">
이런식으로 우회가 가능하다.
즉! 블랙리스트 기반 필터링은 어느정도 한계가 있다.
3.화이트 리스트 기반 필터링
> 특정 단어만 입력되게 하는 것.
특정단어만 사용이 가능하여 보안상으로는 안전하지만 게시글같이 우리가 평소에 사용하는 서비스에선 마음껏 문자도 쓰고 /(>_<)/ 이러한 이모티콘도 사용해야 함으로 주로 사용되진 않는다.
-완벽하게 차단하는 방법이 무엇인가?
HTML 특수문자를 HTML Entity 처리만 해줘도 어느정도 xss 공격은 막을수 있지만 , 이런 티스토리 같이 html Editor 를 사용하는 곳에서는 자바스크립트를 쓸수 있어야하므로 막기가 곤란해진다.
HTML Editor 를 반드시 써야하는 상황이라면 이 절차에 따르기로 한다.
1. 사용자의 파라미터에서 HTML 특수문자들을 전부 HTML Entity로 치환한다.(HTML Entity)
2. 허용해줄 Tag 를 식별하고 그 Tag 를 다시 살린다.(화이트 리스트 기반 필터링) -> img a h1 h2 h3 같은거...
3. 살려준 Tag 내부의 악의적인 Event Handler 가 있는지 필터링 해준다.(블랙 리스트 기반 필터링)
이렇게 총 3번의 과정을 거치면 XSS 취약점이 거의 완벽히 차단이 된다!
'웹해킹' 카테고리의 다른 글
File upload vulnerability - 파일 업로드 취약점 (1) (2) | 2024.07.19 |
---|---|
CSRF(Cross Site Request Forgery)공격 (0) | 2024.07.04 |
XSS(Cross-site scripting)기법 (0) | 2024.06.24 |
SQL Injection(SQLi) (0) | 2024.05.27 |
File upload vulnerabilities (0) | 2024.01.30 |