네이버에서 만든 노무현 전 대통령 추모 게시판을 보다가 우연히 본 문제인데 좀 심각하다 싶어 같이 공유하고 생각해 보고자 한다.

직업병인지 몰라도 항상 어떤 웹 페이지를 보면 HTML 소스를 보는게 일상적이다. 아무 의심없이 추모 게시판 HTML 소스를 열어 보는데 난데 없는 욕설에 깜짝 놀랐다.

추모 게시판 방명록 입력 시 욕설을 필터링 하기 위해 모아둔 키워드 목록이었는데 세상에 이렇게 많은 욕설이 있었는지 상상을 초월할 정도였다. ㅎㅎ

사용자 삽입 이미지

실상 문제는 이 욕설 단어가 아니라 단어 입력을 자바스크립트로 필터링을 하고 있는 사실이었다. 따라서 아마 똑같은 작업을 백엔드 프로그램에서는 하지 않을 것 같다.

웹 개발의 가장 중요한 불문율 중에 하나가 프론트 엔드, 즉 UI 영역에서 유효성 확인(Validation)을 믿지 말라는 것이다. 사용자 데이터 유효성 확인은 꼭 백엔드 프로그램에서 이루어져야 한다. 이는 보안 취약성을 제거해 줄 뿐만 아니라 견고한 웹 프로그래밍의 기초가 되는 사실이다.

지금은 문제가 된다고 판단해서인지 escape로 인크립션이 되어 있지만 unescape을 하면 쉽게 다시 풀 수 있다. 웹 개발자와 프론트 엔드 개발자가 협업이 안되고 있다는 증거인 듯.

두번째는 Ajax의 남용이다. 이 방명록 소스를 보면 글 목록, 글 삭제 등등이 모두 Ajax로 구현이 되어 있다. 한마디로 자바스크립트를 끄면 전혀 동작이 안되는 웹 사이트이다. Ajax의 남용의 대표적인 사례이다.

자바스크립트 없이 간단한 글 쓰기 조차 안되는 것은 방명록 같은 간단한 애플레키에서 보기 힘들고 웹 접근성에 있어 최악의 사례이다.  (참고. 애플리케이션 개발시 Ajax를 사용해야 할 부분과 시점)
사용자 삽입 이미지

특히나 로직 노출 역시 큰 문제이다. 프론트엔드에서는 가급적 웹 프로그램의 로직이 보이지 않도록 해야 한다. 해킹에 바로 취약해 지기 때문이다. 웹 프로그램이 어떻게 짜여 있는지 이렇게 훤히 보이도록 만들어 둔다는 건 문제다. 이거 무슨 오픈 API도 아니고...

네번째는 중요한 개인 식별 정보의 노출이다. 26일 오후 1시까지 대략 50만명이 추모글을 쓴 시점에서 네이버 아이디가 노출되어 있었다. 포털 서비스 특히 메일 서비스를 함께 운영하는 회사에서 아이디 서비스 노출은 매우 큰 문제이다.

아이디 유출은 곧 스팸 메일 공격으로 이어지는 개인 정보이기 때문이다. 따라서 식별 정보는 닉네임을 노출시키는 것이 가장 일반적이다.  그런데도 50만명이 넘는 아이디 정보가 노출되었다. (26일 오후 4시쯤인가 아이디 뒷자리를 ****로 표시하도록 고쳐졌다.)

사용자 삽입 이미지

문제는 이 게시판은 고쳐지긴 했지만 이런 중요한 문제에 대한 내부 규율이 아직 제대로 동작하지 않고 있다는 점이다.

네이버가 소통을 위해 열어두었던 고객 센터 게시판의 3만개가 넘는 글에도 여전히 아이디는 노출되고 있다. (1년 이상 쭉...) 다들 네이버 불평불만 세력(?)으로 보이는데, 블랙 리스트도 아니고...

사용자 삽입 이미지

이러한 문제들은 웹 개발할 때 꼭 알아야 할 상식과 같은 것들이다. 개발자들이 흔히 저지르는 실수들이니 꼭 알아두시길...

update. 오해가 있을 것 같아 적어두자면 이 글은 원래 일요일에 썼지만 스스로 고칠 수 있도록 3일 정도를 기다린 후 수요일에 공개한 것입니다. 즉, 아이디를 ****로 막고 금칙어를 escape 처리하도록 기다린 후에 공개했기 때문에 이 글을 통해 아이디 정보가 나가거나 하지는 않았을 겁니다. (즉 취약성이 고쳐진 후 문제를 공유했다고 보는 게 맞습니다.)