Unuuuuu

브라우저에서 자바스크립트는 무엇을 할 수 없는가?

JavaScript
·

브라우저에서 자바스크립트의 능력은 사용자의 안전을 지키기 위해 제약이 있습니다. 이것은 악성 웹페이지가 사적인 정보에 접근하거나 사용자의 데이터를 손상하는 것을 예방하는 데 목적이 있습니다.

예를 들면 다음과 같은 제약이 있습니다.

  • 웹 페이지의 자바스크립트는 하드 디스크의 임의의 파일을 읽거나 쓰지 못하고, 복사하지 못하며 프로그램을 실행할 수 없습니다. 운영체제가 지원하는 기능으로의 직접적인 접근 권한이 없습니다.

    모던 브라우저는 파일을 다루는 것을 허용합니다. 하지만 접근에는 제한이 있고, 사용자가 브라우저 창안으로 파일을 끌어다 놓거나, <input> 태그를 통해서 파일을 선택하는 등의 특정한 행동을 했을 때만 가능합니다.

    카메라나 마이크, 그리고 다른 장치와 상호작용하는 방법이 있습니다. 하지만 사용자의 명시적인 승인이 필요합니다. 그렇기 때문에 자바스크립트가 활성화된 페이지일지라도 카메라를 몰래 작동시켜 주변을 관찰하고 정보를 다른 곳으로 보낼 수 없습니다.

  • 브라우저의 서로 다른 탭이나 창은 일반적으로 서로를 알지 못합니다. 그런데 하나의 창이 자바스크립트를 사용해 다른 하나의 창을 연 경우에는 서로를 알 수 있습니다. 하지만 이런 경우일지라도, 도메인이나 프로토콜, 포트가 다르다면 자바스크립트는 다른 페이지로 접근할 수 없습니다.

    이는 동일 출처 정책(Same Origin Policy)이라고 불립니다. 이것을 피하기 위해서는 두 페이지 모두 데이터 교환을 동의한다는 자바스크립트 코드를 포함하고 있어야 합니다.

    이러한 제약 사항은 다시 말하지만, 사용자의 안전을 지키기 위해서입니다. 예를 들어 http://anysite.com 으로부터 받아온 페이지가 http://gmail.com 과 같은 브라우저의 다른 탭으로 접근해 정보를 가져오는 것을 가능하게 해서는 안 됩니다.

  • 자바스크립트는 현재 페이지를 받아온 서버와 망을 통해서 쉽게 소통할 수 있습니다. 하지만 다른 사이트나 도메인으로부터 데이터를 받는 것은 심각한 손상을 줄 수 있습니다. 이것이 가능하긴 하지만, 원격 서버의 명시적인 동의가 필요합니다. (HTTP 헤더로 표현됩니다.)

자바스크립트가 서버와 같이 브라우저 바깥에서 사용된다면 이런 제약은 존재하지 않습니다.

Resources