brunch

You can make anything
by writing

C.S.Lewis

by oksambari Jul 31. 2022

#5. REST API가 기본으로 실행 중일 때의 문제

카카오 지도 API & 워드프레스 REST API

REST API는 앞서 카카오 지도 API를 활용할 JSON 데이터 주소를 간편하게 만들 수 있는 방법을 제공하기도 하고, 여기에서 소개하는 것과 같이 데이터를 불러오는 것 외에도 콘텐츠를 만들 수도, 또는 수정을 할 수 있는 등 다양한 활용이 가능한 API입니다. 


워드프레스를 설치 한 다음 별도의 조치를 취하지 않는다면, 기본이 사용 가능한 환경이 만들어져 있습니다. 


그런데 기본으로 제공되는 Endpoint 주소 중 users 리스트를 볼 수 있는 주소에는 유저의 정보 중 유저네임(아이디)이 노출될 수 있는 문제점을 가지고 있습니다. 닉네임에 해당하는 name(별명)은 프로필 설정에서 변경을 하면 되는데, link 정보와 slug 정보를 통해 유저네임이 노출이 됩니다. 만약 이 구조를 아는 사람이라면 어드민 아이디는 일단 확보 후 사이트 해킹을 시도해 볼 수 있는 상황이 되는 것이죠.  





해결 방법


1. 로그인 한 사용자만 REST API를 이용할 수 있게 한다. 

비즈니스 사이트 및 블로그를 운영한다면 대개 어드민만 콘텐츠 작성 및 사이트를 관리하는 경우입니다. 이럴 땐 로그인을 하기 전에는 REST API 주소에서 아무 결과를 보여주지 않게 조치할 수 있습니다. 

https://developer.wordpress.org/rest-api/frequently-asked-questions/ 

링크된 문서의 중간에 나오는 코드를 자식 테마의 functions.php 파일에 추가를 해 주면 일반 방문자는 REST API 주소를 통해 아무 정보를 얻을 수 없게 됩니다. 


2. REST API를 관리할 수 있는 플러그인을 사용한다. 

관련 글들을 찾아보니, 두 가지 괜찮은 플러그인이 있었습니다. 

> Disable WP REST API

> REST API Toolbox

처음 것은 별도의 설정 없이 플러그인만 활성화하면 모든 REST API 관련 기능이 꺼집니다. 

두 번째 것은 모두를 끌 수 있는 기능뿐 아니라, 코어 Endpoint 주소 중 불필요한 것만 끌 수 있는 방법도 제공합니다. users 주소는 사용 안 하는 것으로 바꾸면 더 이상 users 정보들은 REST API 주소에서 노출이 되지 않습니다.   




3. 보안 플러그인 중에 REST API를 켜고 끄는 옵션이 있는지 체크한다. 

사이트 제작을 완료할 시점에는 반드시 보안 플러그인을 설치해야 합니다. 그래야 기본적인 해킹 시도에 대한 차단을 할 수 있게 됩니다. 저는 주로 'iThemes Security'를 썼었는데, 설치 후 REST API를 끄는 옵션이 있어서 기존에는 이걸 이용했었습니다. 







부가 조치 


워드프레스에는 REST API의 users 주소 외에도 어드민의 유저네임이 노출될 수 있는 주소가 하나 더 있습니다. 워드프레스로 만들어진 사이트 주소 끝에 '(도메인)/?author=1'이라고 추가해서 방문해 보면, '(도메인)/author/(1번 유저의 유저네임)/' 형태의 주소로 바뀌면서 유저네임을 알아낼 수 있습니다. 사이트 기획상 각 작성자들의 글을 모아 보여주는 작성자 페이지가 계획된 것이 아니라면, author 페이지를 방문 시도 시 메인 페이지로 돌아가게 하는 조치를 취할 수 있습니다. 






카카오 지도 API와 워드프레스의 REST API를 가지고 지도를 활용한 콘텐츠로의 링크 표시를 어떻게 하는지 작성을 해 봤습니다. 마지막으로 추가했으면 하는 보안 조치도 소개를 해 봤습니다. 


정리를 위해 가장 기본적인 구조를 만들어 본 것이고, 여기에서 다양한 활용 방법들이 나올 수도 있을 듯합니다. 




'카카오 지도 API & 워드프레스 REST API' 활용 방법 정리 

끝. 




 

매거진의 이전글 #4. 마커 위에 링크가 있는 타이틀 표시
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari