전 세계의 수 많은 웹 사이트들은 다양한 컨텐츠를 제공하고 있다.
이 중에 가장 많은 컨텐츠 중에 하나가 Q&A 게시판이다.
Q&A 게시판의 용도가 참으로 다양하지만 이 컬럼은 고객과 기업간에 소통을 돕는 게시판에 초점을 두었다.
제품의 사용법에 대한 질문, 제품 가격에 대한 질문, 서비스에 대한 질문 등등 사용자들에 궁금증은 끝이 없다.
또한 기업들은 이미 시장조사와 선호도 조사 등을 통하여 제품과 서비스를 출시하지만 그것을 실제로 사용하는 고객들의 관점이 너무나 다양하기 때문에 그들과 소통하는 채널이 꼭 필요하다.
그래서 대다수의 기업들은 Q&A 게시판을 하나씩은 운영하고 있다.
제품의 잘못된 점도 고객이 지적해주고 불편한 점과 개선할 점까지 작성해주는 고객분들 덕분에 기업들은 성장한다.
이렇게 감사한 고객들만 있으면 세상이 아름답겠지만 현실은 악의적인 생각을 가지고 글을 남기는 고객들이 있다.
어쩌면 고객이 아닌 고객이라는 감투를 쓴 해커들이 글이 아닌 악성코드를 작성하여 해킹을 시도한다.
그 게시판 글 안에 악성코드로 인한 대표적인 해킹 공격은 XSS(cross-site-scripting)이다.
OWASP Top10 2017에서 발표한 웹 공격 탑 10 중 3위에 해당할 만큼 빈도수도 높으며 기업과 개인이 입은 피해가 상당하다.
특히 고객과 기업이 데이터로 소통하는 Q&A 게시판 같은 경우에는 기업에서 봤을 때 보지 않고서는 못 버틸만큼의 질문의 제목을 달고 그 안에 내용들 또한도 너무나 감사한 내용들이지만 그 뒤에는 현재 웹 사이트를 보고 있는 사용자의 쿠키나 세션 값과 사이트 주소와 포트를 얻어 해커가 관리하는 API 서버에 데이터를 넘기는 자바스크립트 코드를 작성하여 넣는다면 어떻게 될까?
직업정신이 투철한 직원이 해당 글을 열람하는 순간!
API 서버에 직원의 인증 데이터는 이쁘게 데이터베이스에 저장하여 그 정보를 가지고 해커는 관리자 페이지에 로그인을 할 수 있게 된다.
이 후에 고객들의 수 많은 정보들이 유출되고 또한 해킹 당한 계정에 직원은 하지도 않았던 행위들로 인해 책임을 지게 될 수도 있다.
이를 막기 위해서는 여러가지 고민이 필요한 것 같지만 사실은 개발할 때 한가지만 고려하면 된다.
Q&A 게시판의 경우에는 다른 컨텐츠들에 비해 사용자가 글을 쓰는 자유도가 높기 때문에 특수문자 제한을 두는 것도 어려운 일이다.
그래서 입력에서 막기 어려우니 출력에서 XSS 공격을 막아야 한다.
또한 XSS 공격 자체가 브라우저에 페이지가 출력될 때를 이용한 공격이기 때문이다. 관리자 페이지의 뷰 단을 구현할 때 서버에서 jsp, asp, php 페이지로 반환해서 준다면 해커에게는 너무나 감사한 일이며 기업에게는 안타까운 일이다.
취약점을 발견한 뒤에 페이지 뷰 단을 구성하기 전에 서버단에서 데이터들을 XSS필터로 정제하더라도 해커들은 필터에 취약점을 찾아 우회할 수 있기 때문에 근본적인 문제를 해결 할 수 없다. 그래서 XSS 필터로 수준 낮은 공격들은 차단하고 그 이후에 클라이언트의 설계를 다시 하는 것이 바람직하다. 서버에서 받은 데이터를 페이지에 그대로 노출시키는 것이 아니라 뷰 단을 먼저 생성하고 이후에 데이터는 텍스트로 표현하도록 개발해야 한다.
혹시 아직 웹 사이트를 설계 중이라면 클라이언트 개발할 때는 꼭 MVC 패턴으로 개발하기를 추천한다.
XSS에 대한 원리와 시큐어코딩에 대한 내용은 Tech 페이지에서 자세히 다루도록 하겠다.
관리자 웹 페이지의 경우 사용자가 보지 않기 때문에 자칫 더 소홀하게 개발 할 수 있다. 마치 이 시대가 점점 사람의 내면 보다는 외적인 것과 눈에 보이는 배경과 결과만을 중요하게 보듯이 이런 세상에 흐름을 쫒지않고 사용자가 보지 않는 곳에 사용자를 위하여 고민하며 설계하는 개발자의 마인드와 개발문화가 정착되어 해커들의 영역이 줄어들길 소원한다.