자바스크립트를 통한 제약설정의 한계 및 위험

 웹 발전이 빠르게 이루어지고 또한 최근 Ajax의 대두로 인해 자바스크립트가 다시금 기지개를 켜고 있다.
 그런 의미에서 잠깐 자바스크립트를 통한 제약 설정이 얼마나 취약한지 알아보려 한다.
 설정되는 상황은 서버사이드에서는 어떠한 제약 설정도 존재 하지 않으며 자바스크립트에만 제약 사항이 존재한다고 가정한다.

 간단한 예를 들어보자.
 DB 스키마에 아이디 속성이 8글자로 한계지어져 있다고 하자.
 그렇다면 프로그래머는 이용자가 가입시에 아이디를 8글자 이내에서만 받기를 원할 것이다. 이 때 자바스크립트로 아이디 필드를 체크해서 서버사이드로 넘기게 프로그래밍을 하였다고 한다면, 이 제약사항은 풀리기 쉽다.
 파이어폭스에 Firebug라는 플러그인을 사용한다면 매우 손쉽게 동적 페이지의 구성을 변경하고 적용해볼수 있다.
 단순히 Firebug에서 제약사항이 담겨있는 자바스크립트를 찾아 제약사항을 바이패스(bypass) 하게끔 편집하고 페이지에 입력해서 넘기면 제약사항은 간단하게 풀려버린다.
 이 예의 경우는 단순히 사용자의 문의가 생겨서 프로그래머가 곤혹을 겪기만 할 문제이지만, 이게 해킹으로 연결되면 문제는 무시무시해진다.

 예를 들어 SQL Injection 해킹을 막기 위해 프로그래머가 보안을 위해 제약 설정을 했다고 하자. 그런데, 너무나 귀찮은 나머지 그냥 스크립트로 휙 하고 체크하고 넘기게 했다면, 이 프로그래머는 짤릴 위험성을 스스로 열어버린것이다.

 뿐만 아니라 필자는 이러한 방법을 통해 ZB XE 솔루션을 통해 만들어진 학교 게시판에서 익명의 글들의 작성자가 누구인지 알아 내기도 했었다. 익게에는 스크랩 버튼이 없지만, 다른 페이지에 있는 스크랩 소스를 익명 게시판에 Firebug를 통해 붙이고 스크랩해서 확인하는 방법을 사용했었다. (물론, 되는걸 확인 후에 바로 건의해서 이 취약점은 학교 게시판에서 없어졌다.)

이처럼  WEB2.0이 대두되고, 많은 프로그래머들이  웹프로그램의 레벨을 일반 오프라인 프로그램(적당한 단어가 생각이 안나네요) 수준으로 올리기 위해 자바스크립트가 많이 사용되고 있다. 하지만 자바스크립트가 쉽고 편하다 할 지라도, 그리고 동적이기에 좀더 친사용자 적이라 할 지라도, 프로그램의 눈길이 닫지 못하는 곳에 중요한 부분을 만들어두는 방법은 지양해야 할 것이다.

 …너무나 당연하고 모두 아는 내용을 적은건지 하는 의문도 들긴 하지만,, 워워..


Posted

in

by

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *