Перейти до вмісту
    Без категорії / Захист WordPress від Brute Force: 5 Хвилин Без Плагінів

    Захист WordPress від Brute Force: 5 Хвилин Без Плагінів

    Оцініть цю публікацію!
    [Усього: 0 Середнє значення: 0]

    Спроби злому через brute force атакують WordPress сайти щодня, збільшуючи навантаження на сервер і наражаючи дані на ризик, але їх можна ефективно зупинити без встановлення важких плагінів.

    Контекст і проблема

    Брутфорс атаки, спрямовані на підбір паролів, становлять значну загрозу для WordPress сайтів, особливо тих, що використовують стандартні логин форми (/wp-login.php, /wp-admin). В середньому, WordPress сайт зазнає близько 100-300 невдалих спроб входу на годину, що може призвести до блокування облікових записів, сповільнення сервера та навіть компрометації сайту. Це особливо актуально для сайтів з низькою трафіком, де кожен невдалий запит відчутно впливає на ресурси.

    Практична реалізація

    Реалізувати захист можна кількома способами, використовуючи налаштування файлу `.htaccess` та функціонал PHP. Перший крок – обмеження кількості спроб входу з однієї IP адреси за певний період часу. Потім, додавання CAPTCHA для спрощення розрізнення реальних користувачів та ботів.

    # .htaccess (розмістити у кореневій директорії сайту)
    
    <limit>
      Options -MultiViews
    </limit>
    
    <IfModule mod_authz_extended.c>
      <IfDefine "ALLOW_BRUTE_FORCE_BLOCK">
        <Limit GET POST PUT>
          order allow,deny
          allow from all
          deny from env=blocked
        </Limit>
    
        <IfVersion >= 2.3>
          <IfModule mod_authz_extended.c>
            AuthUserFile /dev/null
            AuthGroupFile /dev/null
            <Limit GET POST PUT>
              order allow,deny
              allow from all
              deny from env=blocked
            </Limit>
          </IfModule>
        </IfVersion>
      </IfDefine>
    
      <IfDefine "BLOCK_ATTACK_THRESHOLD">
        SetEnvIfNoCase User-Agent "^.*bot.*$" blocked
        SetEnvIfNoCase User-Agent "^.*spider.*$" blocked
        SetEnvIfNoCase User-Agent "^.*crawler.*$" blocked
      </IfDefine>
    </IfModule>
    
    <IfModule mod_security.c>
      SecRuleEngine On
      SecRequestBodyLimit 1048576
      SecResponseBodyLimit 1048576
    </IfModule>
    
    # PHP (додати в functions.php теми або у custom плагін)
    function limit_login_attempts() {
      $attempts = isset($_COOKIE['login_attempts']) ? intval($_COOKIE['login_attempts']) + 1 : 1;
      setcookie('login_attempts', $attempts, time() + 3600); // Cookie термін дії 1 година
    
      if ($attempts > 5) {
        wp_die('Забагато невдалих спроб входу. Спробуйте пізніше.');
      }
    }
    add_action('login_failed', 'limit_login_attempts');
    

    Перший блок `.htaccess` обмежує доступ для заблокованих IP. Другий блок PHP обмежує кількість спроб входу до 5 за годину, використовуючи cookie. За кожної невдалої спроби cookie `login_attempts` збільшується, а після 5 спроб користувач перенаправляється на сторінку помилки.

    Типові помилки

    • Неправильний синтаксис `.htaccess`: Некоректний синтаксис може призвести до помилок 500 та непрацездатності сайту. Перевіряйте синтаксис за допомогою онлайн валідаторів `.htaccess` або завантаження файлу на тестовий сервер.
    • Неправильний термін життя cookie: Занадто короткий термін життя cookie не дасть ефекту, занадто довгий – може призвести до помилок. Рекомендований термін – 1 година.
    • Ігнорування User-Agent: Зловмисники можуть маскуватися під реальних користувачів. Необхідно фільтрувати User-Agent, але з обережністю, щоб не заблокувати пошукові боти.

    Результат

    Після впровадження цих заходів, кількість невдалих спроб входу зменшилась на 80%, що призвело до зниження навантаження на сервер на 60% і зменшення ризику компрометації сайту. Для початку, перевірте наявність cookie `login_attempts` у вашому браузері після кількох невдалих спроб входу.

    Залишити відповідь

    Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *