HOME
테마 트러블 슈팅

워드프레스 Journey 테마 손보기 — 보안 구멍 막고 PHP 8도 대응한 이야기

on
2026-03-31
수년 전부터 업데이트가 끊긴 유료 테마 – Journey

몇 년째 업데이트가 끊긴 WordPress 테마를 그냥 쓰고 있었다. Journey라는 테마인데, 마음에 들어서 직접 fork해서 운영 중이었는데 — 솔직히 건드릴 엄두를 안 냈던 것도 있다. 근데 이번에 사이트가 500 에러로 다운되면서 어쩔 수 없이 열어봤고, 열어보니 손봐야 할 게 한두 가지가 아니었다.

일단 불부터 껐다

서버가 뻗은 원인은 query-monitor-off라는 플러그인이었다. 정확히는 그 안에 있는 Backtrace.php가 메모리를 512MB까지 혼자 다 잡아먹고 있었던 것. 해결은 플러그인 비활성화 하나로 끝났는데, 찾는 데 시간이 좀 걸렸다. 로그 보고 메모리 사용량 추적하다 보니 범인이 거기였다.

일단 사이트는 살렸고, 그 김에 묵혀뒀던 것들을 다 정리하기로 했다.

보안 구멍들

테마가 오래된 만큼 보안 쪽은 거의 손을 안 댄 상태였다.

CSRF부터 막았다. 메타박스랑 AJAX 핸들러에 nonce가 아예 없었다. WordPress에서 기본으로 제공하는 nonce 기능을 붙여서 폼 요청마다 검증이 되도록 했다.

XSS는 범위가 좀 넓었다. 헤더, 사이드바, 위젯 등 템플릿 파일 전체를 훑으면서 출력 부분에 이스케이프 처리를 전부 붙였다. URL은 URL대로, HTML은 HTML대로, 속성값은 속성값대로 — 각각 용도에 맞는 방식으로.

그 외에 자잘하게 거슬렸던 것들도 같이 정리했다. cURL에서 SSL 검증을 꺼놓은 것도 당연히 다시 켰다.

PHP 8.2 대응

TEMPLATEPATH를 get_template_directory()로 바꾸는 작업만 58개 파일이었다. PHP 8에서 deprecated된 상수라 Warning이 계속 올라왔던 것. Claude Code로 일괄 처리했더니 금방 끝났다.

custom.css.php는 테마 옵션값을 배열에서 직접 꺼내 쓰는 코드가 285곳에 있었는데, null 체크 없이 그냥 접근하다 보니 PHP 8에서 Warning이 폭발했다. 마찬가지로 Claude Code한테 헬퍼 함수 만들고 다 감싸달라고 했더니 깔끔하게 정리됐다.

이미지 쪽도 loading=”lazy” / loading=”eager” 속성을 상황에 맞게 붙였다. 이건 성능 쪽 얘기긴 한데, 어차피 손 대는 김에.

Redux Framework 교체

테마에 번들돼 있던 Redux Framework가 v3.5.9.8이었다. 한참 구버전. 이걸 제거하고 플러그인으로 올라온 v4.5.11로 교체했다.

교체 과정에서 관리자 대시보드 위에 Redux 메뉴가 툭 튀어나오는 버그도 있었는데 같이 잡았고, 테마에 남아있던 IndieGround(개발사) 소셜 링크 같은 데모 잔재들도 이참에 다 걷어냈다.

Avatar Manager 플러그인도 손봄

2016년 이후로 방치된 플러그인인데 그냥 쓰고 있었다. PHP 8 올리면서 Warning이 하나씩 보이기 시작했고, 들여다봤더니 $post null 체크가 빠져있거나 $user->id를 소문자로 쓴 오타가 있거나 — 이미 deprecated된 함수를 그대로 쓰고 있거나. 크게 어렵진 않았는데, 오래된 플러그인이 이런 식으로 조용히 곪아있다는 게 좀 새삼스러웠다.

마무리

Warning 없이 깔끔하게 돌아가는 거 보니까 오래 미뤄뒀던 숙제 끝낸 기분이다. 보안 취약점도 그렇고, PHP 8 대응도 그렇고 — 언젠가는 해야 할 일이었는데 사이트 한 번 뻗어야 움직이게 되는 건 어쩔 수가 없나 싶기도 하고.

운영 서버 배포까지 완료. 이제 한동안은 안 건드려도 되겠지.

TAGS

Comments

RELATED POSTS
검색하기
AD