Функція безпеки PHP: strip_tags, filter_var, Md5 і sha1
Потенційні загрози безпеці
В основному це дві групи людей, які можуть атакувати вашу систему
- Хакери – з наміром отримати доступ до неавторизованих даних або порушити роботу програми
- Користувачі – вони можуть невинно вводити неправильні параметри у формах, що може мати негативний вплив на веб-сайт або веб-програму.
Нижче наведено типи атак, на які нам потрібно звернути увагу.
SQL-ін'єкція – Цей тип атаки додає шкідливий код SQL заяви.
Це робиться за допомогою форм введення користувача або URL-адрес, які використовують змінні.
Доданий код коментує умову в реченні WHERE оператора SQL. Доданий код також може;
- вставте умову, яка завжди буде істинною
- видалити дані з таблиці
- оновити дані в таблиці
- Цей тип атаки зазвичай використовується для отримання несанкціонованого доступу до програми.
Міжсайтовий сценарій – цей тип атаки зазвичай вставляє шкідливий код JavaСценарій. Це робиться за допомогою форм введення даних користувачами, таких як зв’язатися з нами та форми коментарів. Це робиться для того, щоб;
- Отримати конфіденційну інформацію, наприклад дані файлів cookie
- Переспрямуйте користувача на іншу URL-адресу.
- Інші загрози можуть включати – впровадження коду PHP, впровадження оболонки, впровадження електронної пошти, розкриття вихідного коду сценарію тощо.
Практичні поради з безпеки програм PHP
Давайте тепер розглянемо деякі найкращі методи безпеки PHP, які ми повинні враховувати під час розробки наших програм.
PHP strip_tags
Функції strip_tags видаляють HTML, JavaScript або теги PHP із рядка.
Ця функція корисна, коли нам потрібно захистити нашу програму від атак, таких як міжсайтовий сценарій.
Розглянемо додаток, який приймає коментарі від користувачів.
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Якщо ви зберегли comments.php у папці phptuts, перейдіть до URL-адресиhttp://localhost/phptuts/comments.php
Припустімо, що користувач вводить наступне alert(‘Your site sucks!’);
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Перейдіть до URL-адреси http://localhost/phptuts/comments.php
Давайте тепер захистимо нашу програму від таких атак за допомогою функції strip_tags.
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo strip_tags($user_input); ?>
Перейдіть до URL-адреси http://localhost/phptuts/comments.php
Функція PHP filter_var
Функція filter_var використовується для перевірки та очищення даних.
Перевірка перевіряє, чи належать дані правильного типу. Числова перевірка рядка повертає хибний результат.
Дезінфекція – це видалення заборонених символів із a рядок.
Перегляньте це посилання, щоб отримати повну довідку filter_var
Код призначений для системи коментування.
Він використовує функцію filter_var і константу FILTER_SANITIZE_STRIPPED для видалення тегів.
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
вихід:
alert('Your site sucks!');
Функція mysqli_real_escape_string Ця функція використовується для захисту програми від впровадження SQL.
Припустімо, що ми маємо наступний оператор SQL для перевірки ідентифікатора користувача та пароля.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Зловмисник може ввести наступний код у текстове поле ідентифікатора користувача. ' АБО 1 = 1 — І 1234 у текстовому полі пароля Давайте закодуємо модуль автентифікації
<?php $uid = "' OR 1 = 1 -- "; $pwd = "1234"; $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
Кінцевий результат буде
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
ТУТ,
- «SELECT * FROM users WHERE user_id = »» перевіряє порожній ідентифікатор користувача
- «АБО 1 = 1» — це умова, яка завжди буде істинною
- «–» коментує ту частину, яка перевіряє пароль.
Наведений вище запит поверне всіх користувачів. Давайте тепер використаємо функцію mysqli_real_escape_string, щоб захистити наш модуль входу.
<?php $uid = mysqli_real_escape_string("' OR 1 = 1 -- "); $pwd = mysqli_real_escape_string("1234"); $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
Виведе наведений вище код
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Примітка: друга одинарна лапка була екранована для нас, вона розглядатиметься як частина ідентифікатора користувача, а пароль не коментуватиметься.
PHP Md5 і PHP sha1
Md5 — це акронім Message Digest 5, а sha1 — це акронім Secure Hash Algorithm 1.
Вони обидва використовуються для шифрування рядків.
Після того як рядок зашифровано, розшифровувати його втомливо.
Md5 і sha1 дуже корисні при зберіганні паролів у базі даних.
Код нижче показує реалізацію md5 і sha1
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
Якщо ви зберегли файл hashes.php у папці phptuts, перейдіть до URL-адреси
Як ви можете бачити з наведених вище хешів, якби зловмисник отримав доступ до вашої бази даних, він все одно не знав би паролів для входу.
Підсумки
- Безпека стосується заходів, які застосовуються для захисту програми від випадкових і зловмисних атак.
- Функція strip_tags використовується для видалення тегів, таких як з вхідних даних
- Функція filter_var перевіряє та php очищає вхідні дані
- mysqli_real_escape_string використовується для очищення оператора SQL. Він видаляє шкідливі символи з заяв
- як MD5, так і SHA1 використовуються для шифрування пароля.