워드프레스 쓰다가 어느 날 관리자도 모르는 이상한 포스트가 수천 개 올라와 있고, 사이트는 뒤죽박죽 될수 았습니다.

내가 이걸 언제 올렸지? 싶을 때면 대체로 해커가 자동화된 `POST` 요청으로 사이트를 털고 있다는 신호입니다.

특히 요즘 해커들이 애용하는 방법은 두 가지예요. 하나는 `XML-RPC`, 다른 하나는 `wp-json/wp/v2/posts` 같은 REST API입니다.

편하게 글을 자동으로 올릴 수 있는 구조 덕분에, 악용도 참 쉽죠. 그럼 어떻게 막아야 할까요?

스팸 포스트가 자꾸 생긴다고요? 이건 진짜 흔한 공격이에요.

내가 쓴 것도 아닌데 갑자기 게시물이 막 올라와 있고, 심하면 광고부터 성인물까지 막 섞여 있어요.

대부분 외부에서 워드프레스 사이트로 `POST` 데이터를 보내 글을 생성하는 건데요, 이걸 막는 방법은 생각보다 간단합니다.

REST API, 비로그인 유저한텐 꺼버리기

REST API는 편하긴 한데, 누구나 접근할 수 있게 해두면 해커들한테는 뷔페 식당이나 다름없어요.

로그인 안 한 사용자는 REST API 접근 못 하게 막아야죠. 방법은 이렇습니다. `functions.php`에 아래 코드를 추가하세요.

php

add_filter('rest_authentication_errors', function ($result) {

if (!is_user_logged_in()) {

return new WP_Error('rest_cannot_access', 'REST API is disabled for unauthenticated users.', array('status' => 403));

}

return $result;

});

이렇게 하면 적어도 로그인하지 않은 사용자에게는 API가 닫혀요.

wp-admin 말고 다른 경로에서 POST? 일단 차단

워드프레스는 글쓰기, 댓글, 로그인 다 `POST` 요청을 통해 이뤄지긴 해요. 근데 `wp-admin` 아닌 경로에서 수상한 POST가 계속 들어온다? 스팸 가능성 99.9%. 아래는 `.htaccess`로 막는 방법입니다.

apache

    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} POST
    RewriteCond %{REQUEST_URI} !^/wp-admin
    RewriteCond %{HTTP_REFERER} !^https://(www\.)?yourdomain\.com [NC]
    RewriteRule .* - [F]

yourdomain.com 부분만 본인 사이트 주소로 바꾸면 돼요.

한두 개씩만 해도 스팸 트래픽 많이 줄어듭니다.

의외로 테마나 플러그인 중에, 외부 요청 받아서 글을 자동 생성하는 코드가 있을 수도 있어요. 특히 마케팅용 자동화 플러그인들이 그렇죠. `wp_insert_post()` 함수나 `wp_ajax_` 관련 함수들을 코드 에디터로 검색해보세요. 수상한 부분이 있다면 사용 중지하거나 삭제를 추천합니다.

마지막으로 기본 보안 설정 몇 가지만 더 알려드릴게요.

* 테마/플러그인 자동 업데이트 켜놓으세요.
* 관리자 비밀번호는 특수문자 포함 16자 이상으로!
* 보안 플러그인 하나쯤은 필수예요. (추천: Wordfence, iThemes Security)
* 파일 권한도 체크: `wp-content/uploads`는 `755`, 나머지는 `644`로 설정하세요.

워드프레스는 매력적이지만, 그만큼 해커한테도 매력적입니다.

REST API, XML-RPC, 외부 POST 요청 이 셋 중 하나라도 허술하면? 그 틈 타서 새벽에 스팸 포스트 5천 개 올라와 있는 거, 진짜 순식간이에요.

그러니까 지금이라도 하나씩 막아보세요. 나중에 후회하는 것보다 낫습니다.