본문으로 바로가기

브라우저 내부에는 자바스크립트 엔진이라는 특수한 소프트웨어을 포함하고 있으며 이 엔진은 자바스크립트 코드를 인터프리터 형태로 실행할 수 있도록 해준다. 그래서 일반적인 언어는 컴파일러가 필요하지만, 자바스크립트 언어의 경우 브라우저가 직접 파싱하고 직접 해석하게 된다.


페이지가 로딩 후 자바스크립트 코드는 웹 브라우저와 함께 작동하기 때문에, 실시간으로 사용자의 이벤트에 응답하고, 페이지를 수정하기도 한다. 사용자와 대화하는 자바스크립트 언어의 특징으로 인해 좀더 빠르게 사용자와 소통하기 위해 자바스크립트 언어는 클라이언트에 임시 저장을 하게 된다. 그래서 클라이언트용 언어라고 알려져 있으며, 사용자는 쉽게 소스코드를 볼 수 있다.


자바스크립트 코드는 웹 페이지에 소스코드를 그대로 사용하지 않아도 되며, 외부 파일 형태로 소스코드를 작성한 후 로드한 페이지에서 사용할 수 있다. 마치 해당 파일을 임포트(import)한 형태이다. 임포트된 자바스크립트 파일은 브라우저로 인해 페이지가 로드 될 때 사용된다. 이렇게 사용하는 이유는 재사용 가능한 코드를 파일로 만듦으로써 재사용하고 관리하기 쉽기 때문이다. 모든 페이지에서 공통으로 사용하는 모듈 형태의 코드를 자바스크립트 파일로 만들어 재사용하며, 공격자는 이런 자바스크립트 파일을 공략함으로써 악성 스크립트 한 줄로 모든 페이지에서 악성코드를 유포하는 형태로 만들 수 있다.


또한 CDN(Contents Delivery Network) 서비스를 통해 대중적으로 사용하는 자바스크립트 서비스를 제공하기도 한다. 그래서 공격자가 CDN의 자바스크립트 파일을 변조하여 악성코드를 유포했다면, 수많은 사이트에서 악성코드를 유포하게 된다.


자바스크립트는 실시간 사용자와 대화하는 언어이다. 사용자와의 대화는 브라우저를 통해 이루어지며, 사용자의 반응(당연히 브라우저 밖의 반응은 인식하지 못한다.)을 이벤트라 한다. 브라우저에서 이벤트가 발생 시 브라우저는 발생한 이벤트를 수집하고 수집한 정보를 토대로 관련있는 함수로 전달한다. 이 함수는 이미 자바스크립트 언어에서 이벤트에 대한 응답을 하기 위해 설계된 함수이다.


만약 onclick() 이라는 함수를 사용했다면, 사용자의 클릭에 해당하는 이벤트를 브라우저가 수집하고 적절히 설계된 함수를 통해 응답하게 된다.


자바스크립트에 의해 규정된 몇 가지 법칙이 있다. 그 중 하나가 식별자의 구성 방법이다.


  • 식별자는 최소한 하나의 문자로 구성되어야 하며, 구성하는 첫 번째 글자는 문자, _, $로 시작된다.
  • 첫 글자 다음에 오는 각 글자는 문자, _, $, 숫자이어야 하며, 특수문자와 공백은 식별자로 구성할 수가 없다.

이러한 구성 방법으로 _와 $는 독립적으로 변수를 선언할 수 있으며, 이렇게 만들어진 난독화가 Non alphanumaric 형태 중에서 jjencode 같은 형태이다.


자바스크립트는 클라이언트 환경에 접근 할 수 있다. 방문했던 웹 페이지에 대한 기록이나 브라우저늬 크기를 알아낼 수 있고, 브라우저의 버전, 제작 회사, 쿠키값을 통한 제한적인 기억 등을 할 수 있다. 또한 시간을 설정하여 특정 시간이 지난뒤 자바스크립트를 실행 할 수 있다. 이러한 이유로 자바스크립트는 사용자의 정보를 수집가능하며, 이러한 기능을 서비스화 한 것이 애널리틱스(Analytics)이다. 하지만 이 정보들은 충분히 변조할 수 있다는 점을 기억하자.



댓글을 달아 주세요

티스토리 툴바