This page has been robot translated, sorry for typos if any. Original content here.

Загальні Рекомендації Захисту

Будь-який використовує MySQL (або будь-який інший SQL сервер) на комп'ютері, пов'язаному з Internet повинен прочитати цю консультацію, щоб уникнути найбільш часто зустрічаються проблем захисту.

Однак необхідно підкреслити важливість повного захисту сервера (не просто MySQL сервера) від всіх типів застосовуваних нападів. У даній статті, на жаль, не можливо охопити всі аспекти проблем безпеки, але найважливіші проблеми розглянуті досить повно.

MySQL підтримує безпеку, засновану на Списках Управління Доступу (ACL) для всіх підключень, запитів, і інших операцій, які користувач може намагатися виконувати. Є також деяка підтримка для SSL -зашіфрованних підключень між клієнтами MySQL і серверами. Багато з концепцій, що обговорюються в цій статті, не є специфічними для MySQL і можуть бути застосовані до всіх програм.

Коли MySQL запущений, постарайтеся слідувати цим рекомендаціям:

Нікому не давайте доступ (окрім адміністратора MySQL) до таблиці USER в базі даних MySQL. Зашифрований пароль - реальний пароль в MySQL. Якщо Ви знаєте пароль, перерахований в таблиці USER для даного користувача, ви можете легко увійти як цей користувач, якщо у вас є доступ до комп'ютера, перерахованого для цього облікового запису.

Вивчіть систему привілеї доступу MySQL. Команди GRANT і REVOKE використовуються для управління доступом до MySQL. Чи не надавайте великих привілеїв, ніж це необхідно. Ніколи не надавайте привілеї всім комп'ютерам в мережі. Команди контрольних перевірок:

1. Пробуйте mysql -u root. Якщо ви зможете з'єднатися з сервером без запиту пароля, значить у вас проблеми. Будь-хто зможе з'єднатися з вашим MySQL сервером як MySQL root користувач з повними привілеями. Ретельно читайте команди інсталяції MySQL, звертаючи увагу на опції установки пароля.

2. Використовуйте команди SHOW GRANTS і check, щоб бачити, хто має доступ до якої. Видаліть зайві привілеї, використовуючи команду REVOKE.

Не зберігайте паролі у вигляді відкритого тексту у вашій базі даних. Коли ваш комп'ютер зламаний, вторгся може отримати повний список

паролів і використовувати їх. Замість цього використовуйте MD5 алгоритм або будь-який інший на основі односторонньої хеш-функції.

Не вибирайте паролі зі словників. Є спеціальні програми, щоб підбирати їх. Навіть паролі подібно "xfish98" є дуже поганими. Набагато краще - "" duag98 ", який містить те ж саме слово" риба "але надруковане на одну клавішу вліво на клавіатурі. Інший метод полягає в тому, щоб використовувати паролі типу" УМББР ", який складається з перших слів у реченні" У Мері була велика дитина ". Такі паролі просто запам'ятати і надрукувати, але важко підібрати зловмисникові.

Використовуйте Firewall. Він захистить вас, принаймні, від 50% експлуатуються вразливостей в будь-якому програмному забезпеченні. MySQL використовує 3306 порт за замовчуванням. Цей порт повинен бути доступний тільки від довірених комп'ютерів. Найпростіший спосіб перевірити, чи є ваш порт MySQL відкритим, полягає в тому, щоб пробувати наступну команду від деякої віддаленої машини, де server_host - ім'я хоста вашого MySQL сервера: telnet server_host 3306

Не довіряйте ніяким даними, введеними користувачами. Вони можуть обдурити ваш код, вводячи спеціальні символи в Web формі або URL. Переконайтеся, що ваш додаток залишається безпечним, якщо користувач вводить щось подібно: DROP DATABASE mysql ;. Це - критичний приклад, але безліч витоків захисту і втрата даних можуть відбуватися через хакерів, що використовують подібні методи. Також, не забудьте перевіряти числові дані. Звичайна помилка повинна захистити тільки рядки. Іноді люди думають, що, якщо база даних містить тільки публічно доступні дані, вона не повинна захищатися. Це не правильно. По крайней мере, DoS атака може бути виконана проти таких баз даних. Найпростіший спосіб захисту від такого типу нападу полягає в тому, щоб використовувати апострофи навколо числових констант:

SELECT * FROM table WHERE ID = '234'. MySQL автоматично перетворює цей рядок до числа і прибирає всі нечислові символи в запиті. перевіряємо:

Все Web програми:

1. Спроба вводити '' '' " 'у ваших Web формах. Якщо Ви отримуєте будь-який вид помилки MySQL, відразу ж досліджуйте цю проблему.

2. Спроба змінити URL, додаючи% 22 ( ' "'),% 23 ( '#'),% 27 '' '.

3. Спроба змінити типи даних в динамічних URL від числових символів до символів, наведених в попередніх прикладах. Ваша програма повинна бути безпечно проти цього і подібних нападів.

4. Спроба вводити символи, прогалини, і спеціальні символи замість чисел в числових полях. Ваша програма повинна видалити їх перед їх прийняттям MySQL, або ваше застосування повинне видати помилку.

5. Перевірте розміри даних перед прийняттям їх MySQL.

6. Ваша програма має поєднуватися з базою даних, використовуючи користувача, відмінного від того, якого ви використовуєте для адміністративних цілей. Не давайте вашим додатком більше прав, ніж ті, в яких вони реально потребують.

Користувачі PHP:

Перевірте функцію addslashes (). Після PHP 4.0.3, доступна функція Mysql_escape_string (), яка є заснованої на функції з таким же ім'ям в MySQL C API.

Користувачі MySQL C API:

Перевірте API запит mysql_escape_string ().

Користувачі MySQL ++:

Перевірте переходи і лапки модифікаторів в потоках запитів.

Користувачі Perl DBI:

Перевірте метод quote () або використовуйте структурний нуль (placeholders).

Користувачі Java JDBC:

Використовуйте об'єкт PreparedStatement і placeholders.

Не передавайте незашифровані дані по Internet. Ці дані доступні для кожного, хто має час і здатність перехопити їх і використовувати для власних цілей. Замість цього, використовуйте зашифрований протокол типу SSL або SSH. MySQL підтримує внутрішній SSL версії 3.23.9. SSH може використовуватися для створення зашифрованих тунелів.

Навчитеся використовувати tcpdump. У більшості випадків, ви можете перевірити, чи дійсно потоки даних MySQL незашіфрованни, використовуючи наступну команду:

shell> tcpdump -l -i eth0 -w - src or dst port 3306 | strings


Іноді для захисту скрипта від злому сайту потрібно звертати увагу не на конкретні уразливості (але їх, звичайно, потрібно усувати), а на захист сайту в цілому (по суті запобігати уразливості до їх знаходження). У даній статті я розповім Вам, що потрібно періодично проробляти над своїм сайтом, щоб захистити його від злому.

Якщо Ви користуєтеся яким-небудь скриптом, доступним для вільного скачування, то стежте за bugtracker'ом і періодично оновлюйтеся. У нових версіях часто виправляють серйозні уразливості, знайдені в попередніх версіях.

Також якщо на Вашому сайті зазначено, яким скриптом Ви користуєтеся, то видаліть з цієї інформації номер версії. Якщо хакер не знає, яка у Вас версія, він може не задіяти уразливість в тій версії скрипта, яка стоїть у Вас. Але, повторюся, лише "може", так що все одно оновлюйтеся.

Тепер пройдемося по помилок, які можуть бути у Вашому самопальному скрипті.

1. Пароль зберігається у файлі, який може бути завантажено хакером

Якщо реквізити доступу містяться в файлі, то потрібно обов'язково захистити його від скачування. Перевірте, чи можна відкрити файл, який містить логін і пароль через адресний рядок браузера!

2. Пароль зберігається у файлі, який індексують пошукові системи

Виправивши попередню помилку, Ви заодно виправите і цю - іноді логін і пароль зберігаються в файлах, які без проблем знаходить Яндекс чи Google! Чи не виправивши цю помилку, Ви ризикуєте тим, що хакер навіть не спеціально зламає Ваш сайт, а просто знайде жертву через пошуковик і хакнет першого-ліпшого невдачливого web-майстри! Чи не опинитеся їм!

До речі, закрити доступ пошукачам можна через robots.txt. Повністю закривати доступ до сайту не слід (а звідки тоді візьмуться відвідувачі?), А слід лише для тих директорій, які не повинен бачити відвідувач, а, отже, і пошуковий робот.

3. Пароль зберігається в незашифрованому вигляді

Пароль потрібно зберігати в зашифрованому вигляді. Найкращим видом є хешування (можна використовувати алгоритми MD5 або SHA1), так як прямим шляхом отримати пароль з хеша неможливо. Але існують онлайн-бази хешей, в яких може зберігатися пароль і до Вашого хешу, так що використовуйте неординарні паролі і паролі з випадкового набору символів.

Для більшої впевненості в надійності захисту Вашого сайту, почитайте статті по злому, які у вільному доступі опубліковані на хак-ресурсах, і спробуйте застосувати викладені там методики, як то кажуть, "на собі".