워드프레스 REST API: 완전히 끄지 않고 로그아웃 상태만 막는 이유

공정위 광고 문구 Ver 3.1
공정위 광고 문구 Ver 3.2(모바일 전용)

워드프레스 REST API는 로그인하지 않은 방문자에게도 wp-json 주소로 사이트의 사용자명을 노출합니다. 완전히 끄면 블록 편집기 저장이 실패하는 경우가 있어, 로그아웃 상태의 요청만 막고 401 응답으로 확인하는 방법을 정리했습니다.

1️⃣ 워드프레스 REST API란: wp-json 주소와 하는 일

워드프레스 REST API는 글·페이지·사용자 같은 사이트 데이터를 JSON 형식으로 주고받는 워드프레스 기본 기능이며, 사이트 주소 뒤의 /wp-json/ 아래에서 응답합니다.

주소는 /wp-json/ 아래에 [wp/v2/posts]·[wp/v2/pages]·[wp/v2/users]처럼 데이터 종류별로 나뉘며, 이 주소 하나하나를 엔드포인트라고 부릅니다. 블록 편집기도 글을 저장할 때 이 주소로 요청을 보내게 됩니다.

https://example.com/wp-json/
https://example.com/wp-json/wp/v2/posts
https://example.com/wp-json/wp/v2/pages
https://example.com/wp-json/wp/v2/users

2️⃣ wp-json으로 드러나는 사용자명

  • ↪️ 막는 이유: users 401 · 작성자 페이지로도 보임

[wp/v2/users] 엔드포인트는 글을 발행한 사용자마다 표시 이름과 slug 값을 응답하며, slug에는 기본적으로 로그인 아이디가 그대로 들어갑니다. 테스트 사이트인 https://testpilotweb.com/의 관리자 계정 역시 slug와 로그인 아이디가 같았습니다.

로그인 아이디가 드러나면 공격자는 비밀번호만 알아내면 로그인할 수 있으며, 테스트 사이트의 워드프레스 로그인 화면에도 2026년 10월 7일 하루 2,570회의 무차별 대입 시도가 기록됐습니다.

이 주소를 막아도 작성자 페이지 주소(/author/아이디/)에는 같은 아이디가 그대로 남습니다.

3️⃣ 완전히 끄면 깨지는 것

  • ↪️ 블록 편집기 저장 · MCP 도구 0개

WP REST API를 모두 끄면 블록 편집기의 글 저장부터 실패하며, 워드프레스 최적화 플러그인 중 하나인 Perfmatters도 이 때문에 끄는 범위를 [관리자가 아닌 경우 비활성화]와 [로그아웃 시 비활성화] 두 단계로 나눠 두고 있습니다. 작성자나 기여자 계정이 있는 사이트라면 [관리자가 아닌 경우 비활성화]도 그 계정의 글 저장을 막게 됩니다.

로그아웃 상태만 막은 사이트에서도, claude.ai에 MCP 커넥터를 연결하자 인증을 마친 뒤 도구가 0개로 표시됐습니다. 서버 기록에는 MCP 요청이 모두 401로 남았으며, Perfmatters가 MCP의 토큰 확인보다 먼저 요청을 차단한 것이 원인이었습니다.

[REST API 비활성화] 값로그아웃 방문자의 users 주소관리자가 아닌 계정의 글 저장맞는 경우
기본값 (활성화됨)사용자명 노출저장됨—
관리자가 아닌 경우 비활성화401저장 실패작성자·기여자 계정이 없는 사이트
로그아웃 시 비활성화401저장됨작성자 계정이 있는 사이트, MCP 등 토큰 연결은 예외 경로 추가

4️⃣ 로그아웃 상태만 막는 설정(Perfmatters)

  • ↪️ 설정 위치 · 401 응답 확인

워드프레스 관리자 화면의 [설정] → [Perfmatters] → [일반]에서 [코어] 항목의 [REST API 비활성화]를 [로그아웃 시 비활성화]로 바꾸고 [변경 사항 저장]을 누릅니다.

WordPress Settings → Perfmatters → General(워드프레스 REST API)
Perfmatters Disable REST API: Disable When Logged Out

Perfmatters 지원 언어: 영어(기본), 한국어, 독일어, 프랑스어, 이탈리아어, 네덜란드어, 포르투갈어(브라질), 러시아어, 우크라이나어, 터키어, 불가리아어, 헝가리어, 인도네시아어, 페르시아어, 중국어(간체)

Perfmatters settings simulator: General → Core
Perfmatters 설정 시뮬레이터 · Perfmatters 리뷰·가이드

로그인하지 않은 시크릿 창에서 /wp-json/wp/v2/users를 열면 [죄송합니다. REST API 요청을 할 수 있는 권한이 없습니다.] 메시지와 함께 401 응답이 돌아오며, 로그인한 상태의 블록 편집기는 그대로 글을 저장하게 됩니다.

🔌 같은 요청, 두 가지 응답 GET /wp-json/wp/v2/users
막지 않은 사이트
200
로그인하지 않은 방문자도 사용자명을 확인할 수 있습니다.
[
  {
    "id": 1,
    "name": "User A",
    "slug": "user_a",
    "link": "https://example.com/author/user_a/"
  }
]
[로그아웃 시 비활성화] 사이트
401
로그인하지 않은 요청은 메시지와 함께 401 응답이 돌아옵니다.
{
  "code": "rest_authentication_error",
  "message": "죄송합니다. REST API 요청을 할 수 있는 권한이 없습니다.",
  "data": { "status": 401 }
}
slug slug에는 기본적으로 로그인 아이디가 그대로 들어갑니다.
왼쪽은 응답에서 id·name·slug·link 네 항목만 옮겼으며, 이름은 예시(user_a)입니다.


5️⃣ 막은 경로에 예외 두기

  • ↪️ MCP 경로 예외 · REST API 링크 제거와의 차이

막아 둔 상태에서 특정 경로만 열어야 할 때는 Perfmatters의 [perfmatters_rest_api_exceptions] 필터에 그 경로를 추가합니다. claude.ai MCP 커넥터의 도구 0개 문제는 Perfmatters [코드] 메뉴에 PHP 스니펫을 만들어, MCP 경로 하나만 예외로 두어 해결했습니다.

add_filter('perfmatters_rest_api_exceptions', function($exceptions) {
    $exceptions[] = '/mcp/mcp-oauth-server';
    return $exceptions;
});

예외를 둔 뒤에도 토큰이 없는 요청은 MCP가 직접 [MCP authentication required.] 메시지와 401 응답으로 차단하며, /wp-json/wp/v2/users는 계속 Perfmatters의 401 응답을 반환하게 됩니다.

🚦 요청이 거치는 순서
예외를 두기 전 · MCP 요청
[로그아웃 시 비활성화] 상태에서 claude.ai MCP 커넥터가 인증을 마친 뒤 보낸 요청입니다.
Perfmatters
401 차단
→↓
MCP 토큰 확인
도달하지 못함
→↓
결과
도구 0개
예외를 둔 뒤 · MCP 요청
/mcp/mcp-oauth-server 경로를 Perfmatters 예외에 추가한 상태입니다.
Perfmatters
예외 경로라 통과
→↓
MCP 토큰 확인
MCP가 직접 확인
→↓
결과
토큰이 없으면 401
[MCP authentication required.]
예외를 둔 뒤 · /wp-json/wp/v2/users
예외에 넣지 않은 경로는 그대로 막힙니다.
Perfmatters
401 차단
→↓
결과
사용자명 노출 차단 유지
⚠️ Perfmatters는 MCP의 토큰 확인보다 먼저 요청을 차단합니다.

같은 [코어] 항목의 [REST API 링크 제거]는 페이지 머리말과 응답 헤더에서 api.w.org 링크만 지우는 설정이며, WP REST API 자체는 그대로 응답합니다.

🔢 FAQ & 추천 콘텐츠

xmlrpc.php는 REST API와 다른 주소라 REST API를 막아도 그대로 응답합니다. 테스트 사이트에는 2026년 10월 8일 하루 xmlrpc.php로 734회의 POST 요청이 기록됐으며, Perfmatters는 같은 [코어] 항목의 [XML-RPC 비활성화]로 막을 수 있습니다.

WP Rocket은 /wp-json/ 주소를 캐시 제외 목록에 두고 있어, REST API 응답은 저장하는 즉시 바뀝니다. [REST API 링크 제거]처럼 페이지 HTML이 바뀌는 설정은 캐시를 비운 뒤에 반영됩니다.

아닙니다. 워드프레스 블록 편집기는 글을 저장할 때 REST API로 요청을 보내며, claude.ai 같은 AI 도구를 연결하는 MCP 커넥터도 /wp-json/ 아래 경로를 사용합니다.

ℹ️ 제휴 안내
본 사이트의 콘텐츠에는 제휴 링크가 포함되어 있습니다. 방문자가 이 링크를 통해 상품 또는 서비스를 구매하면 본 사이트는 판매처로부터 수수료를 지급받습니다. 이 과정에서 구매자가 지불하는 금액(이벤트 할인 시 금액이 내려갑니다↓)은 오르지 않습니다. 게시된 가격·할인·재고 정보는 작성 시점 기준이며 실제와 다를 수 있으므로, 구매 전 판매처에서 최종 확인하시기 바랍니다. 상품 선정과 평가는 자체 기준에 따라 작성되며, 수수료 지급 여부가 소개 순서나 평가 내용에 영향을 주지 않습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

인간임을 증명하세요: 2   +   2   =