wp-config.php 보안 취약점: 워드프레스 보안 강화

vi로 wp-config.php를 열어 둔 사이, 같은 폴더에 생긴 스왑 사본(.swp)이 웹 주소로 그대로 열린 적이 있습니다. 2026-09-13 이 사이트에서 실제로 확인한 일이며, 그 사본에는 데이터베이스 비밀번호와 보안 키가 모두 들어 있었습니다.
wp-config.php 보안은 아래 여섯 가지를 위에서부터 차례로 점검합니다.
1️⃣ wp-config.php가 노출되면 생기는 일
wp-config.php에는 데이터베이스 이름·사용자·비밀번호와, 로그인 쿠키를 암호화하는 보안 키 8개가 들어 있습니다.

이 파일이 외부에 노출되면 공격자가 데이터베이스에 직접 접속하거나, 보안 키로 로그인 세션을 위조해 관리자 권한을 가져갈 수 있습니다.
2️⃣ 파일 권한 600으로 제한
워드프레스는 보통 폴더를 755, 파일을 644로 두지만, wp-config.php는 소유자만 읽고 쓸 수 있는 600으로 제한합니다. 테스트 사이트 testpilotweb.com에서 실행한 명령입니다.
chmod 600 /home/testpilotweb/www/wp-config.php
stat -c '%a %U' /home/testpilotweb/www/wp-config.php
600 testpilotwebPHP가 파일 소유자와 다른 계정으로 실행되는 서버는 600이면 워드프레스가 이 파일을 읽지 못해 사이트가 열리지 않습니다. testpilotweb.com은 PHP-FPM이 소유자와 같은 계정으로 실행되어 바꾼 뒤에도 정상으로 열렸습니다.
SSH를 쓸 수 없는 공유 호스팅은 FTP 프로그램이나 cPanel 파일 관리자의 권한 메뉴에서 같은 값으로 바꿉니다.
3️⃣ 웹 서버에서 접근 막기
권한을 바꿀 수 없거나 한 겹 더 막아 두려면, 웹 서버가 wp-config.php 요청 자체를 거절하게 합니다.
🔲 Apache(.htaccess)
<Files wp-config.php>
Require all denied
</Files>예전 글에 자주 보이는 [order allow,deny]·[deny from all]은 Apache 2.2 문법입니다. Apache 2.4에서는 호환 모듈(mod_access_compat)이 켜져 있을 때만 동작합니다.
🔲 nginx
nginx는 .htaccess를 읽지 않으므로 서버 설정 파일에 [location] 규칙을 넣으며, 이 사이트도 같은 방식으로 403을 반환합니다.
location ~* /wp-config(-sample)?\.php$ {
deny all;
}정규식의 점은 [\.]로 이스케이프합니다. 점을 그대로 두면 [/wp-config-php-기본-설정/] 같은 글 주소까지 막히며, 이 사이트도 같은 실수로 글이 403으로 열리지 않은 적이 있습니다.
4️⃣ 편집기 임시 파일·백업 파일 막기
vi로 파일을 열어 두는 동안 생기는 [.swp] 사본과 수정 전에 남긴 [.bak] 사본은 PHP로 실행되지 않고 글자 그대로 내려갑니다.
nginx에서 두 종류를 함께 끊으며, [444]는 응답 없이 연결을 닫는 nginx 전용 코드입니다.
location ~ \.sw[opx]$ { return 444; }
location ~* (\.(bak|orig|old|save)|_ori|\.bak\.[0-9]+)$ { return 444; }5️⃣ 웹 루트 한 단계 위로 옮기기
워드프레스는 wp-config.php를 설치 폴더에서 먼저 찾고, 없으면 바로 위 폴더에서 찾아 불러옵니다. 파일을 [public_html] 바깥으로 한 단계 올리면 웹 주소로는 닿지 않게 됩니다.
다만 위 폴더에 다른 워드프레스의 [wp-settings.php]가 있으면 워드프레스가 그 폴더의 wp-config.php를 읽지 않습니다. 옮긴 뒤에는 사이트와 관리자 화면이 열리는지 바로 확인합니다.
6️⃣ 파일 편집 비활성화
워드프레스 대시보드 내 ‘테마 편집기’ 및 ‘플러그인 편집기’ 메뉴를 비활성화합니다. 공격자가 관리자 권한을 탈취하더라도 웹을 통해 악성 코드를 삽입하는 것을 막는 가장 강력한 방어책 중 하나입니다.
define('DISALLOW_FILE_EDIT', true); 7️⃣ wp-config-sample.php 지우기
wp-config-sample.php는 설치할 때 쓰는 예시 파일이라 설치가 끝나면 지워도 됩니다. 민감한 정보는 없지만, 공격자가 기본 경로로 찾아보는 파일이라 남겨 둘 이유가 없습니다.
샘플 파일의 실제 줄과 항목별 뜻은 wp-config.php 기본 설정 글에 정리했습니다. 지우지 않고 둔다면 위 nginx 규칙의 [(-sample)?] 부분이 이 파일도 함께 막습니다.
ℹ️ 제휴 안내
본 사이트의 콘텐츠에는 제휴 링크가 포함되어 있습니다. 방문자가 이 링크를 통해 상품 또는 서비스를 구매하면 본 사이트는 판매처로부터 수수료를 지급받습니다. 이 과정에서 구매자가 지불하는 금액(이벤트 할인 시 금액이 내려갑니다↓)은 오르지 않습니다. 게시된 가격·할인·재고 정보는 작성 시점 기준이며 실제와 다를 수 있으므로, 구매 전 판매처에서 최종 확인하시기 바랍니다. 상품 선정과 평가는 자체 기준에 따라 작성되며, 수수료 지급 여부가 소개 순서나 평가 내용에 영향을 주지 않습니다.