Загальні рекомендації захисту (mysql і sql web-інтерфейс)

Загальні Рекомендації Захисту (MySQL і SQL Web-інтерфейс)

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

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

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

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

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

Вивчіть систему привілеї доступу MySQL. Команди GRANT і REVOKE використовуються для управління доступом до 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. Ваша програма має поєднуватися з базою даних, використовуючи користувача, відмінного від того, якого ви використовуєте для адміністративних цілей. Не давайте вашим додатком більше прав, ніж ті, в яких вони реально потребують.

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

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

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

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

Користувачі 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

Схожі статті