» » PHP - Безпека баз даних SQL

PHP - Безпека баз даних SQL

PHP - Безпека баз даних SQL
Бази даних є одним з ключових компонентів більшості веб-додатків, дозволяючи надавати на сайтах динамічний контент. Так як в таких БД може зберігатися дуже точна або конфіденційна інформація, ви повинні забезпечити хороший захист даних.

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

Очевидно, що сам по собі PHP не може захистити вашу базу даних. Цей розділ документації розповідає про основи безпечного доступу і управління даними в PHP-скриптах.

Запам'ятайте просте правило: максимальний захист. Чим більше потенційно небезпечних ділянок системи ви пропрацюєте, тим складніше буде потенційному зломщикові отримати доступ до бази даних або пошкодити її. Хороший дизайн бази даних і програмних додатків допоможе вам впоратися з вашими страхами.

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

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

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

Вам не обов'язково реалізовувати всю бізнес-логіку в веб-додатку (тобто в скриптах), для цього також можна використовувати можливості, що надаються базою даних: тригери, представлення, правила. У разі зростання системи вам знадобляться нові з'єднання з БД, і логіку роботи знадобитися дублювати для кожного нового інтерфейсу доступу. Виходячи з вищесказаного, тригери можуть використовуватися для прозорої і автоматичної обробки записів, що часто необхідно при налагодженні додатків або при трасуванні відкату транзакцій.

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

Захист сховища бази даних
SSL / SSH захищає дані, якими обмінюються клієнт і сервер, але не захищають самі дані, що зберігаються в базі даних. SSL - протокол шифрування на рівні сеансу передачі даних.

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

Найбільш просте рішення цієї проблеми - встановити спочатку звичайний програмний пакет для шифрування даних, а потім використовувати його у ваших скриптах. PHP, в такому випадку, може допомогти вам у роботі з такими розширеннями як Mcrypt і Mhash, що реалізовують різні алгоритми криптування. При такому підході скрипт спочатку шифрує зберігаються дані, а потім дешифрує їх при запиті. Нижче наведені приклади того, як працює шифрування даних в PHP-скриптах.

У випадку роботи з прихованими службовими даними їх нешифрований уявлення не потрібно (тобто не відображається), і, як наслідок, можна використовувати хеширование. Добре відомий приклад хешування - зберігання MD5-хешу від пароля в БД, замість зберігання оригінального значення. Більш детальна інформація доступна в описі функцій crypt () And md5 ().

Приклад хешування паролів
/ / Збереження хешування пароля
$ Query = sprintf ("INSERT INTO users (name, pwd) VALUES ('% s', '% s');",
            addslashes ($ username), md5 ($ password));
$ Result = pg_exec ($ connection, $ query);

/ / Перевірка введеного користувачем логіна і пароля на коректність
$ Query = sprintf ("SELECT 1 FROM users WHERE name = '% s' AND pwd = '% s';",
            addslashes ($ username), md5 ($ password));
$ Result = pg_exec ($ connection, $ query);

if (pg_numrows ($ result)> 0) {
    echo "Welcome, $ username!";
}
else {
    echo "Authentication failed for $ username.";
}


3313 24.11.13



Напівжирний Нахилений текст Підкреслений текст Перекреслений текст | Вирівнювання по лівому краю По центру Вирівнювання по правому краю | Вставка смайликів Вибір кольору | Прихований текст Вставка цитати Перетворити вибраний текст з транслітерації в кирилицю Вставка спойлеру