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('
?? °úµµÇÑ Á¢¼ÓÀ¸·Î ÀÎÇØ Â÷´ÜµÇ¾ú½À´Ï´Ù. Àá½Ã ÈÄ ´Ù½Ã ½ÃµµÇϼ¼¿ä.
');
}
// ¹æ¹® ±â·Ï ÀúÀåÇÒ ¿É¼Ç (¿öµåÇÁ·¹½º µ¥ÀÌÅͺ£À̽º È°¿ë)
$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('?? °úµµÇÑ Á¢¼ÓÀ¸·Î ÀÎÇØ Â÷´ÜµÇ¾ú½À´Ï´Ù. 10ºÐ ÈÄ ´Ù½Ã ½ÃµµÇϼ¼¿ä.
');
}
// ¾÷µ¥ÀÌÆ®µÈ ¹æ¹® ±â·Ï ÀúÀå
update_option('visit_logs', $visit_logs);
}
add_action('init', 'limit_excessive_requests');