Browser Security

10923 단어 개발공부studystudy

브라우저/웹사이트가 위협되는 상황?

 정기적으로 사용하는 웹사이트로 공격을 당하거나 마비되고 혹은 잘못된 정보가 게시되는 경우가 있다. 또 대규모 웹사이트에서는 개인정보가 유출되는 경우도 종종 소식을 접할 수 있다.

이러한 비승인된 접근, 사용, 데이터 파괴 등으로부터 이를 보호하기 위해 행동/실행해하는 것이 바로 '보안(Security)'이다.

우리가 사용하는 브라우저는 Javascript 라는 코드를 구동할 수 있는데, 이 Javascript를 통해 할 수 있는 것들이 존재한다. 브라우저에서 Javascript로 아래와 같은 것을 할 수 있고,

  • ajax call을 해서 api를 호출할 수 있다
  • 다이나믹하게 DOM을 제어할 수 있다
  • 인증정보를 브라우저에 저장할 수 있다.
  • 인증정보를 불러올 수 있다

이를 이용해서 위협적인 상황을 만들 수도 있다.


어떤 공격이 일어날 수 있을까?

 브라우저/웹사이트를 위협하는 것 중 대표적인 것으로는 XSS(CrossSite Scripting)CSRF(CrossSite Request Forgery) 를 들 수 있다. 여기서 두 개 모두 'Cross-Site'를 쓰는데, 서로 다른 웹사이트 사이에서 정보교환이 이뤄지는 식으로 작동한다고 이해하면 된다.
 하지만 여기서는 정보교환이라기보다 공격이라는 방식이 이뤄진다. 사이트의 취약점(vulnerabilities)을 이용해서 해커가 정보를 가로채는 등의 악의적인 행동을 취하는 것을 뜻한다. 이 두 공격 형태를 알아보자.

XSS(CrossSite Scripting)

  XSS는 script 코드 주입(injected script code)를 통해 발생하는데, 보안이 약한 웹 애플리케이션에 대한 웹 기반 공격이다. 이는 클라이언트가 서버를 신뢰하기 때문에 발생하는 이슈로 서버에서 받는 자료는 무조건 정상데이터일거야 라는 믿음이라고 보면 된다.

 이러한 신뢰를 바탕으로 XSS는 GET이나 POST를 통해 서버에 악성 스크립트를 발송하여, 또다른 클라이언트의 웹에 그것을 심어 나타나게 만든다. 간단한 예제로 특정한 팝업메세지를 무한하게 띄울 수 있는 것 이 있다.

XSS 공격

// 막힌 방법들 중 예시
//1.스크립트 태그를 이용한 공격
<script>alert('XSS');</script>
//2.링크 태그를 이용한 공격
<a href="javascript:alert('XSS')">XSS</a>
//3.이벤트 속성을 이용한 공격 등등..
<img src="#" onerror="alert('XSS')">

더 보기

XSS 방어

 이를 방어하기 위해 sanitizing 을 통해 웹사이트 공격에 대한 방어를 취할 수 있다. 코드를 실행하기 위한 지시사항이 포함된 '마크업'을 제거/비활성화 시키는 것이다. 더 쉽게 말하면, 코드 실행이 아닌 있는 그대로 문자열로써 인식하게 하는 것이다.

 아래 예제에서는 현재 주석처리된 스크립트<script>alert("hello")</script>를 XSS 공격으로 생각하면 되고, 서버에서는 그 공격을 막기 위해 &lt;script&gt;alert("hello")&lt;/script&gt 와 같이 스크립트를 문자열로 바꿔둘 수 있다. Result를 보면 알겠지만 '<''&lt'로 바꿔서 출력한다.