WordPress는 전 세계 웹사이트의 40% 이상을 차지하는 만큼, 해킹 시도의 주요 표적이기도 합니다. 플러그인이나 테마 취약점뿐 아니라 서버 설정도 함께 강화해야 합니다.
파일 권한 설정
잘못된 파일 권한은 해킹의 주요 경로입니다:
# WordPress 루트 디렉토리
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
# wp-config.php는 더 엄격하게
chmod 440 /var/www/html/wp-config.php
# 웹서버 소유권 설정
chown -R www-data:www-data /var/www/html
Nginx에서 민감한 파일 차단
/etc/nginx/sites-available/yourdomain 에 추가합니다:
# wp-config.php 직접 접근 차단
location = /wp-config.php {
deny all;
}
# .htaccess, .git 등 숨김 파일 차단
location ~ /\. {
deny all;
}
# xmlrpc.php 차단 (불필요하면)
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}
# 업로드 디렉토리에서 PHP 실행 차단
location ~* /uploads/.*\.php$ {
deny all;
}
# 워드프레스 코어 파일 직접 접근 차단
location ~* ^/wp-admin/includes/ {
deny all;
}
wp-login.php 보호
로그인 페이지에 대한 브루트포스 공격을 제한합니다:
# IP 제한 (관리자 IP만 허용)
location = /wp-login.php {
allow 203.0.113.1;
deny all;
}
# 또는 Rate Limiting 적용
limit_req_zone $binary_remote_addr zone=wp_login:10m rate=5r/m;
location = /wp-login.php {
limit_req zone=wp_login burst=3 nodelay;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
PHP 설정 강화
/etc/php/8.1/fpm/php.ini 편집:
# 에러 메시지 외부 노출 금지
display_errors = Off
log_errors = On
error_log = /var/log/php/error.log
# 파일 업로드 제한
upload_max_filesize = 10M
post_max_size = 10M
# 실행 시간 제한
max_execution_time = 60
memory_limit = 256M
# PHP 버전 정보 숨기기
expose_php = Off
# 위험한 함수 비활성화
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
보안 HTTP 헤더 추가
server {
# 클릭재킹 방지
add_header X-Frame-Options "SAMEORIGIN" always;
# MIME 타입 스니핑 방지
add_header X-Content-Type-Options "nosniff" always;
# XSS 필터 활성화
add_header X-XSS-Protection "1; mode=block" always;
# HTTPS 강제 (SSL 적용 후)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# 서버 정보 숨기기
server_tokens off;
}
정기 점검 체크리스트
- WordPress 코어, 플러그인, 테마 최신 버전 유지
- 비활성화된 플러그인/테마 삭제 (비활성화만으로는 취약점이 남음)
- 관리자 계정 이름
admin변경 - 강력한 비밀번호 사용 (최소 16자)
- 2단계 인증(2FA) 플러그인 적용
- 정기 파일 무결성 검사
- 접속 로그 정기 검토
해킹 후 대응
이미 해킹이 의심된다면:
# 최근 수정된 PHP 파일 확인
find /var/www/html -name "*.php" -newer /var/www/html/wp-config.php -ls
# 알 수 없는 PHP 코드 패턴 검색
grep -r "eval(base64_decode" /var/www/html --include="*.php"
grep -r "<?php \$_" /var/www/html --include="*.php"