워드프레스 과도한 접속시 테마 functions.php로 차단하는 방법

워드프레스 운영에 있어서 가장 최악의 방문자는 쓰레기 봇을 비롯한 쓸데없는 접속자들입니다. 해킹 등 특정한 목적을 가지고 접근하는 불량 접속자들은 무차별적인 새로 고침을 하여서 웹사이트에 중대한 문제를 야기합니다. 워드프레스 홈페이지에 악의적으로 접속하는 시도를 막기 위해서는 플러그인으로도 가능합니다. 그러나 플러그인 설치로 인하여 웹사이트가 무거워지거나 또는 부담이 된다면 워드프레스 테마에 있는 functions.php를 수정하여 과도한 접속을 방지할 수 있습니다.

워드프레스 과도한 접속시 테마 functions.php로 차단하는 방법

FTP를 이용하여 웹사이트에 설치한 테마에 있는 functions.php를 먼저 찾아 봅니다. 대략 /public_html/wp-content/themes/테마명/functions.php 이렇게 위치합니다. functions.php를 다운받아서 편집기로 다음의 내용을 추가하여, 수정 후 다시 업로드하면 됩니다.

워드프레스 웹사이트에 악의적으로 접속하는 시도를 막는 것은 플러그인으로도 가능합니다. 그러나 플러그인 설치로 인하여 웹사이트가 무거워지거나 또는 부담이 된다면 워드프레스 테마에 있는 functions.php를 수정하여 과도한 접속을 방지할 수 있습니다.

워드프레스 functions.php에서 과도한 페이지 로드를 감지하고 차단하는 코드

○ 특정 시간(TIME_FRAME, 기본 1분) 내에 페이지를 설정된 횟수(MAX_REQUESTS, 기본 10회) 이상 새로 고침하면 차단
○ 차단된 사용자는 일정 시간(BLOCK_TIME, 기본 10분) 동안 사이트 접근 불가능
○ 관리자(로그인하여 관리자 권한이 있는 경우)는 제외
○ 차단된 사용자는 경고 메시지를 받고 사이트 접속 차단됨

설정 변경 가능

$max_requests = 10; → 허용되는 최대 요청 수 (기본 10회)
$time_frame = 60; → 감지하는 시간(초, 기본 60초 = 1분)
$block_time = 600; → 차단 시간(초, 기본 600초 = 10분)

function limit_excessive_requests() {
// 관리자 제외 (로그인한 사용자가 관리자면 차단 로직 실행 안 함)
if (is_user_logged_in() && current_user_can('manage_options')) {
return;
}

// 설정 값
$max_requests = 20;   // 허용되는 최대 요청 수
$time_frame = 60;     // 감시 시간 (초) - 기본 1분
$block_time = 600;    // 차단 시간 (초) - 기본 10분

// 현재 방문자 IP 가져오기
$visitor_ip = $_SERVER['REMOTE_ADDR'];
$time_now = time();

// 차단된 사용자 목록을 저장할 옵션 (워드프레스 데이터베이스 활용)
$blocked_ips = get_option('blocked_ips', []);

// 차단된 IP인지 확인
if (isset($blocked_ips[$visitor_ip]) && $blocked_ips[$visitor_ip] > $time_now) {
    wp_die('<h1>?? 과도한 접속으로 인해 차단되었습니다. 잠시 후 다시 시도하세요.</h1>');
}

// 방문 기록 저장할 옵션 (워드프레스 데이터베이스 활용)
$visit_logs = get_option('visit_logs', []);

// 현재 IP의 방문 기록 불러오기
if (!isset($visit_logs[$visitor_ip])) {
    $visit_logs[$visitor_ip] = [];
}

// 현재 시간 기준으로 time_frame 내의 기록만 유지
$visit_logs[$visitor_ip] = array_filter($visit_logs[$visitor_ip], function ($timestamp) use ($time_now, $time_frame) {
    return ($time_now - $timestamp) < $time_frame;
});

// 현재 요청 기록 추가
$visit_logs[$visitor_ip][] = $time_now;

// 요청 횟수가 제한을 초과하면 차단
if (count($visit_logs[$visitor_ip]) > $max_requests) {
    $blocked_ips[$visitor_ip] = $time_now + $block_time; // BLOCK_TIME 동안 차단
    update_option('blocked_ips', $blocked_ips);
    wp_die('<h1>?? 과도한 접속으로 인해 차단되었습니다. 10분 후 다시 시도하세요.</h1>');
}

// 업데이트된 방문 기록 저장
update_option('visit_logs', $visit_logs);

}
add_action('init', 'limit_excessive_requests');

코드 상세 설명

○ 관리자 제외 : if (is_user_logged_in() && current_user_can(‘manage_options’))
→ 로그인한 사용자가 관리자(manage_options 권한 보유)인 경우 차단 X
○ IP별 방문 기록 저장 : visit_logs 배열에 각 IP의 페이지 방문 시간을 기록
○ time_frame(1분) 내의 요청만 유지
○ 과도한 요청 감지 및 차단: max_requests(기본 10회) 초과 시 blocked_ips에 차단 시간 저장, 차단된 경우 wp_die()로 즉시 접속 차단

워드프레스 전용 보안 플러그인 사용하는 것도 한 방법

웹사이트에 악의적으로 접속하는 시도를 막기 위한 워드프레스 전용 보안 플러그인을 설치하는 것도 한 방법입니다. Wordfence Security 또는 NinjaFirewall 등이 있습니다. 이러한 보안 플러그인들은 웹사이트의 취약점을 찾는 공격자를 차단하고 안전한 조치를 취해주지만 경우에 따라서는 다소 불편할 수 있습니다. 따라서 과도한 접속자를 막고자 한다면 테마의 functions.php를 간단하게 수정하는 조치도 좋습니다.

상식은 권력이다 nBox.com


error: 상식은 권력이다!
Scroll to Top