워드프레스 REST API 외부 접근 제한이 필요하다는 것을 알게 된 건 보안 점검 도구를 돌리다가 우연히 발견했을 때였습니다. 병원 사이트에서 다음 URL로 접근해보니 관리자 계정명과 아이디가 JSON 형식으로 그대로 반환됐습니다.
https://병원사이트.com/wp-json/wp/v2/users
관리자 계정 이름을 알면 브루트포스 공격의 절반은 완성된 셈입니다. REST API가 열려 있는 한 이런 정보가 누구에게나 공개됩니다.
기본 상태에서 외부 접근이 가능한 REST API 엔드포인트:
/wp-json/wp/v2/users: 사용자 목록 (계정명, 표시 이름)/wp-json/wp/v2/posts: 게시글 목록 (작성자 ID 포함)/wp-json/: 전체 라우트 목록 (서버 구조 파악 가능)로그인하지 않은 외부 사용자의 REST API 접근을 차단합니다. functions.php 또는 플러그인에 추가합니다.
// 비인증 사용자 REST API 차단
add_filter('rest_authentication_errors', function($result) {
if (!is_user_logged_in()) {
return new WP_Error(
'rest_not_logged_in',
'인증이 필요합니다.',
array('status' => 401)
);
}
return $result;
});
단, 이 방법은 REST API를 사용하는 일부 플러그인(Contact Form 7, Elementor 등)과 충돌할 수 있습니다.
전체 차단 대신 사용자 목록 엔드포인트만 제거하는 방법입니다.
// /wp/v2/users 엔드포인트 제거
add_filter('rest_endpoints', function($endpoints) {
if (isset($endpoints['/wp/v2/users'])) {
unset($endpoints['/wp/v2/users']);
}
if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
}
return $endpoints;
});
이 방법은 다른 REST API 기능에 영향을 주지 않으면서 계정 목록 노출만 차단합니다.
코드 수정 없이 Disable REST API 플러그인을 사용하면 됩니다. 비인증 접근 전체 차단 또는 특정 엔드포인트만 허용 설정이 가능합니다.
Gutenberg 편집기는 REST API를 사용하므로, 완전히 차단하면 관리자 페이지 일부 기능도 영향을 받을 수 있습니다. 설정 후 관리자 페이지를 직접 테스트해서 확인하세요.
AI가 초안을 생성하고, 의료기관 인프라 운영자가 1차 데이터 기반으로 최종 검수·승인합니다.
작성·검수: WavePix 운영자 (의료기관 3곳 인프라 전담)