Scripting
Cross-site scripting(XSS)
sql injection과 더불어 가장 일반적인 방법의 공격 방식이다. 해커로 하여금 원치 않은 javascript 실행으로 인해 웹사이트 변형시킬 수 있다.
이전에 heck this site에서 게시글 작성란을 통해 js를 실행시켰던 것과 같이, 보안이 취약한 사이트에서 js를 inject 하여 웹사이트를 변형시킬 수 있다.
해커들이 XSS를 어디에 이용할까?
- 미디어 사이트에 Worms를 뿌린다. - 페이스북, 트위터, 유튜브 등이 이에 공격당한 적이 있다.
- session hijacking - 해커의 컨트롤 아래에서 세션 아이디를 전송시킬 수도 있다.
- Identify Theft - 기밀 정보 등을 보안이 취약한 웹사이트에 입력할 시, js가 이를 훔칠 수도 있다.
- 서비스 거부 공격 및 웹 사이트 파괴 행위가 가능하다.
- 민감한 정보, 패스워드 등을 훔칠 수 있다.
- 가짜 은행 웹사이트를 이용하여 금융 사기를 가능하게 한다.
Protection
XSS 공격을 방어하기 위해서는 data store이 되는 곳으로 들어오는 모든 dynamic content가 js를 실행시키지 못하도록 설정해야 한다.
특별한 일을 제외하고는 외부에서 들어온 js를 실행시킬 이유가 없기 때문에 이러한 것들이 contents로써 다뤄질 수 있도록 해야 한다.
일반적으로는 이러한 방법으로 특수 문자를 html entity encoding을 통해 다른 것으로 변경시켜준다. (그래서 가끔 복붙을 할 때 내가 작성한 특수문자 대신 다른 기호가 튀어나온 거구나)
다행이도 요즘 프레임워크들은 자동으로 이러한 dynamic content를 디폴트로 빠져나온다 한다.
Node.js
->safe
} ->not safe
react
render() {
return <div>{dynamicContent}</div>
} -->safe
render() {
return <div dangerouslySetInnerHTML={ __html: dynamicContent } />
} ->not safe
이외에 신경써야 할 것…
HTTP-only cookies
아주아주 드물게 좋은 목적으로 쿠키를 읽고 조종하는 경우가 있기 때문에 쿠키를 http-only로 하는 것을 추천한다.
관련되어 있는 것들
- Reflected XSS
- DOM - Based CSS