Безпека сайту за вечір: 10 кроків, які можна перевірити самому

Паролі, вхід у два кроки, HTTPS, заголовки, адреса панелі, права, копії та спам: у кожного кроку три рядки — що зробити, як перевірити самому і що буде, якщо не робити. Без залякування.
Малі сайти зламують найчастіше не тому, що хтось полює саме на вас. Це боти, які днями перебирають одні й ті самі слабкі місця: короткі паролі, старі версії, панель за стандартною адресою, відкриту реєстрацію. Закрийте ці місця, і ваш сайт перестане бути легкою ціллю. Нижче десять кроків на один вечір. У кожного три рядки: що зробити, як перевірити самому (екран або команда) і що буде, якщо не робити.
Це не список «натискайте все підряд»: кроки незалежні, брати їх можна по одному. Частину роботи рушій робить сам: наприклад, надсилає браузеру заголовки безпеки (крок 5), вам лишається переконатися, що вони доходять.
Ваш пульт: «Захист сайту» #
Відкрийте «Система → Безпека → Захист сайту». Це один екран, на якому видно, що гаразд, що варто підтягнути і що погано. Кожен рядок пояснює себе й веде туди, де це виправляється. Майже кожен крок нижче перевіряється за рядком на цьому екрані.
Це підказка, а не вирок: цифри рахуються на льоту за даними вашого сайту.
Крок 1. Оновлення #
Що зробити. Відкрийте «Система → Оновлення» (сторінка видима тим, у кого є право на налаштування сайту: власнику й адміністратору) й оновіться, якщо є нова версія. Перед оновленням зробіть копію бази (крок 8): рушій робить її сам, але ручна копія нічого не коштує. Як перевірити. На тій самій сторінці видно, яка версія стоїть і чи є нова. Раз на тиждень дивіться туди, де ви перевіряєте замовлення чи пошту. Якщо не робити. Діри, які вже закрито в новій версії, лишаються у вас, і про них відомо всім: виправлення виходить разом з описом помилки.Крок 2. Пароль і добір пароля #
Що зробити. У «Налаштування сайту → Вхід і користувачі → Реєстрація та користувачі» поставте «Найменша довжина пароля» від 10 знаків (це значення за замовчуванням). Довжина сама по собі не рятує, але очевидні паролі рушій відхиляє окремо. Потім у «Безпека → Вхід і сеанси» переконайтеся, що «Спроб входу» не більше десяти. За замовчуванням це п’ять невдач, після чого вхід у цей обліковий запис закрито на 15 хвилин (термін змінюється в полі «Замикати на, хвилин»), і бот упирається в ліміт. Як перевірити. На екрані «Захист сайту» рядки «Довжина пароля» та «Блокування після невдалих входів» мають бути «Добре». Якщо не робити. Короткі паролі й необмежені спроби роблять перебір питанням часу. Це найпростіший спосіб злому, і він закривається двома числами.Крок 3. Вхід у два кроки #
Що зробити. У своєму профілі увімкніть другий крок («Увімкнути другий крок»): код із застосунку на телефоні підтверджує вхід. Збережіть «Резервні коди»: кожен працює один раз і потрібен, якщо телефон загублено. Потім попросіть те саме в кожного адміністратора. Коли всі звикнуть, у «Налаштування сайту → Вхід і користувачі → Безпека → Вхід до панелі» перемкніть «Двофакторний захист» з «Рекомендувати» на «Вимагати від адміністраторів». Це вас не замкне: рушій відправить кожного, у кого другого кроку ще немає, у профіль, щоб увімкнути його, а профіль доступний завжди. Тож вмикати не страшно. Як перевірити. Рядок «Два кроки при вході в адміністраторів» на екрані «Захист сайту»; у списку «Користувачі» є фільтр «Вхід у два кроки», він показує, в кого ще вимкнено. Якщо не робити. Пароль можуть украсти не у вас, а в чужому сервісі, де ви користувалися тим самим. Тоді без другого кроку вхід до панелі відкритий.Крок 4. Шифроване з’єднання (HTTPS) #
Що зробити. Переконайтеся, що в сайту є сертифікат і він відкривається заhttps://. Лише після цього в «Налаштування сайту → Вхід і користувачі → Безпека → З’єднання» увімкніть «Лише захищене з’єднання (https)». Без сертифіката вмикати це не можна: перенаправлення відведе відвідувачів у нікуди.
Як перевірити. Відкрийте сайт за адресою з http://: браузер має перейти на https://. Те саме в командному рядку:
curl -I http://example.comLocation: https://example.com/. Рядок «Шифроване з’єднання (HTTPS)» на екрані «Захист сайту» має бути «Добре».
Якщо не робити. Паролі й сеанси ходять відкритим текстом: у чужій публічній мережі їх може прочитати стороння людина.Крок 5. Заголовки безпеки #
Що зробити. Майже нічого: рушій надсилає їх сам. Ваше завдання переконатися, що їх не зрізає проксі чи хостинг перед сайтом. Як перевірити.curl -I https://example.comX-Content-Type-Options: nosniff: браузер не вгадує тип файлу;X-Frame-Options: SAMEORIGIN(на окремих сторінкахDENY) і вContent-Security-Policyчастинаframe-ancestors 'self': чужий сайт не вставить вашу сторінку в рамку;Referrer-Policy: strict-origin-when-cross-origin: назовні не йдуть зайві частини адреси;Permissions-Policy: камера, мікрофон і геолокація вимкнені, поки вони не потрібні;Strict-Transport-Security: max-age=31536000за https: браузер сам запам’ятає ходити лише захищеним з’єднанням.
Крок 6. Адреса панелі й доступ за адресами #
Що зробити. У «Налаштування сайту → Вхід і користувачі → Безпека → Вхід до панелі» впишіть «Своя адреса панелі» (латиниця, цифри, дефіс), придумайте свою, не копіюйте приклад із картинки нижче. Запишіть її десь поруч із паролем. Поле «Пускати до панелі лише з цих адрес» потрібне лише тим, у кого є постійна адреса (наприклад, офіс зі своєю адресою): із чужих адрес панель відповість «сторінки немає». Домашня й мобільна адреса зазвичай змінюється, і тоді ви самі опинитеся за дверима: список без вашої поточної адреси зберегти не можна, але завтра адреса може стати іншою. Зняти обмеження без панелі можна лише командоюphp nex1on admin:access на сервері. Без доступу до консолі сервера й без постійної адреси це поле краще не вмикати.
Як перевірити. Відкрийте нову адресу: має відкритися вхід. Старий /admin має відповідати «сторінки немає» (404). Рядки «Адреса панелі керування» та «Доступ до панелі за адресами» на екрані «Захист сайту» це відобразять.
Якщо не робити. Нічого страшного не станеться, але боти знаходять панель за стандартною адресою першою, і шум у журналі росте. Своя адреса не замінює пароль і вхід у два кроки, вона лише прибирає вас зі списку легких цілей.
Пока никто не высказался. Будьте первым.