XSS(Cross-Site Scripting)은 널리 알려진 웹 보안 취약점 중 하나로, 악의적인 사용자가 공격하려는 사이트에 악성 스크립트를 삽입하는 공격 기법이다.
악성 스크립트가 서버에 저장되어서 응답이 올 때 스크립트가 실행되는 기법이다. 게시글이나 댓글 같은 정보는 서버에 저장된 후 출력되기 때문에 Stored XSS를 일으키는 데 주로 사용된다.
URL 등을 통해서 공격 문구가 삽입된다.
innerHTML 사용 자제HTML5에서는 innerHTML 을 통해 주입한 스크립트는 실행되지 않는다.
<script>alert('xss attack!');</script>
하지만 아래와 같이 여전히 스크립트를 실행할 방법이 존재한다. 예시에서는 onerror 이벤트 속성을 통해 스크립트를 주입한다.
<img src="없는 경로" onerror=alert('xss attack!')>
따라서 꼭 필요한 경우가 아니라면 innerHTML 대신 textContent , innerText 를 사용한다. 이들은 스크립트를 주입하지 않는 특징이 있다.
HttpOnly 옵션 활성화쿠키 전송 시 HtttpOnly 옵션을 활성화하지 않으면 스크립트를 통해 쿠키에 접근할 수 있기 때문에 세션 하이재킹에 노출될 위험이 있다.
Session Hijacking
유효한 사용자의 세션(로그인 상태)을 가로채서, 그 사용자의 정보나 서비스에 무단으로 접근하는 사이버 공격
https://session-hijacking.site?name=<script>alert(document.cookie);</script>
악의적인 클라이언트가 세션ID, 토큰과 같이 쿠키에 저장된 정보에 접근하는 것을 차단할 수 있다.
로컬스토리지에 세션ID와 같이 민감한 정보를 저장하지 않는다.
스크립트에 사용되는 태그를 특수문자로 치환한다. 예를 들어, < (여는 태그)의 경우 < 와 같이 치환할 수 있다.
관련 라이브러리
lucy-xss-servlet-filter
참고 자료
[클릭 한 번에 해킹 가능 || XSS (실습 포함)](htt
[10분 테코톡] 🔧알트의 XSS