왓챠는 유저의 평가를 바탕으로 영화를 추천해주는 웹 서비스다.
왓챠를 분석하게 된 이유는 유한개의 DB를 가지고 있는 서비스에서
모든 영화를 평가했을때 어떻게 될까 라는 단순한 호기심이 생겼었기 때문이다.
사실 웹 사이트 api 분석이라기 보다는 json 둘러보기 정도가 더 정확한듯 하다.
MySQL을 사용하고는 있으나 웹 프레임 워크(루비온레일즈)를 사용하고 있기 때문에 sql injection를 기대하진 않았다.
또한 왓챠의 멤버 중에서 보안 실력이 뛰어난 분이 계시기 때문에 큰 문제는 없을거란걸 알았다.
가장 핵심인 '영화 추천' 부분은 무한 스크롤 기능을 통해 서버에 request를
http://watcha.net/api/movies/recommend?ref=wall&count=8&more=true
와 같은 주소로 전송하고 json 형태로 받아오게 된다.
count를 증가시키면 데이터를 더 받아올 수는 있지만 위의 request로는 20개가 최대인것 같다.
하지만
http://watcha.net/api/movies?type=eval&count=900&more=true&page=
와 같은 형태로 request를 보내면 900개의 데이터를 볼 수 있었다.
그리고 구글링을 통해서
http://watcha.net/movies/detail/18681
와 같은 형태로 영화 정보를 얻을 수 있다는 사실을 알 수 있었다.
이를 통해 watcha에 저장된 모든 영화의 id와 hash된 id를 얻을 수 있었다.
다행이도 지금은 위의 url이 막힌것처럼 보이며,
http://watcha.net/api/movie/mp0dx6
와 같이 숫자가 아닌 hash화된 id를 통해서 영화 정보를 얻어온다.
그리고 비슷한 영화를 추천할 때는
http://watcha.net/api/movies/similar/mvf3t1?count=10
와 같은 request를 보내게 된다.
영화 검색시에는
http://watcha.net/search.json?query=%20&page=1
와 같이 request를 보내며 javascript 로 공백을 검색하는것을 막아 뒀지만,
http://watcha.net/search.json?query=+ 와 같은 형태로 우회할 수 있다.
그래서 watcha가 가지고 있는 영화 DB의 갯수가 대략 6만개 정도라고 예상했다.
네이버의 DB가 약 9만개인 점을 생각한다면 적다고 생각했지만, 네이버와 달리
드라마 정보가 적기 때문이라고 생각했다.
대충 소스를 짜서 돌려본 결과 아래와 같은 계정을 만들 수 있었고,
무한 로딩
추천하는 영화가 없음
위와 같이 평소에 보지 못했던 새로운 메세지를 볼 수 있었다 :)
( 하지만 페이지 로딩 시간은 상당히 길어졌다 )
쿼리를 바꿔보면 새로운 쿼리를 찾을 수 도 있을것 같지만, 호기심은 해결되었으니 더 둘러보지는 않았다.
나는 이 글을 통해 왓챠가 보안에 취약하다는 것을 말하려고 하는 것은 아니다.
단지, 평소에 즐겨 쓰던 서비스였기 때문에 애정이 많이 가지만,
DB가 생각했던것보다 많이 공개되어 있어서 조금 조심할 필요가 있다고 생각된다.
사실 웹 개발에 대한 지식이 부족해서 어떻게 개선할 수 있을지는 잘 모르겠다..
마지막으로 다른분들은 이런 잉여짓을 하지 않기를 바란다...
4년전의 글이지만 정말 재미있게 보았습니다 ㅎㅎ 비슷한 생각을 하신분이 4년전ㅇ ㅔ계셨다니...ㅋㅋ
답글삭제