브라우저에서 자바스크립트로 할 수 있는 것들이 많기 때문에 보안 위협도 많다.
<aside> 💡 XSS는 자바스크립트 코드 주입 공격으로 보안이 약한 웹 어플리케이션에 대한 웹 기반 공격. XSS 공격의 희생자는 어플리케이션이 아닌 유저(User)이며, XSS 공격에서 해로운 콘텐츠는 자바스크립트를 활용하여 전달됨.
</aside>
클라이언트가 서버를 신뢰하기 때문에 발생하는 이슈(클라이언트가 서버로 부터 받는 데이터는 항상 정상적인 데이터일 것이다 라고 생각하기 때문)
해커는 취약한 form을 제출하여 웹사이트 데이터베이스에 악성 스크립트가 포함된 페이로드 삽입 (POST)
{
name: "hacker101",
text: "<script>alert('브라우저가 해킹 당했습니다.')</script>"
}
피해자(유저)는 해당 웹사이트에 접속하여 해당 페이지 요청 (GET)
웹사이트는 유저 브라우저에 해커의 악의적인 페이로드가 포함된 페이지를 제공하게 됨 (악성 스크립트가 응답에 포함).
유저 브라우저는 응답 내부의 악성 스크립트를 실행하고 유저의 쿠키를 해커 서버로 보냄 (GET)
<script>
태그의 <
꺽쇠를 <
HTML 엔티티 방식으로 바꾸거나 sanitize 같은 라이브러리를 이용하면 된다)사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 해서 특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격 방법. XSS는 사용자가 특정 웹사이트를 신뢰하는 점을 노리는 것이라면(클라이언트가 서버를 신뢰), CSRF는 서버가 클라이언트를 신뢰해서 발생하는 이슈.
사용자가 웹사이트에 로그인한 상태에서 사이트간 요청 위조 공격 코드가 삽입된 페이지를 열면, 공격 대상이 되는 웹사이트는 위조된 공격 명령이 믿을 수 있는 사용자로부터 발송된 것으로 판단하게 되어 공격에 노출된다.