Функция безопасности PHP: Strip_tags, filter_var, Md5 и sha1.
⚡ Умное резюме
PHP Security защищает веб-приложения от злоумышленников и неосторожного ввода данных путем проверки, очистки и безопасного хранения данных. В этом пошаговом руководстве рассматриваются основные угрозы, а затем демонстрируются strip_tags, filter_var и esca.pingа также современное хеширование паролей с помощью password_hash для защиты от XSS, SQL-инъекций и кражи учетных данных.

Потенциальные угрозы безопасности
В основном, существуют две группы людей, которые могут атаковать вашу систему:
- Хакеры – с целью получить доступ к несанкционированным данным или нарушить работу приложения.
- Пользователи могут по неосторожности вводить неверные параметры в формы, что может негативно сказаться на работе веб-сайта или веб-приложения.
Ниже приведены виды атак, на которые нам следует обратить внимание.
SQL-инъекция – этот тип атаки добавляет вредоносный код к SQL заявления.
Это делается либо с помощью форм ввода данных пользователем, либо с помощью форм ввода данных пользователем. URLте, которые используют переменные.
Приведённый код комментирует условие в предложении WHERE оператора SQL. Приведённый код также может:
- вставьте условие, которое всегда будет истинным
- удалить данные из таблицы
- обновить данные в таблице
Этот тип атаки обычно используется для получения несанкционированного доступа к приложению.
Межсайтовый скриптинг (XSS) – этот тип атаки внедряет вредоносный код, обычно JavaСкрипт. Это делается с помощью форм ввода данных пользователем, таких как формы обратной связи и формы комментариев. Это делается для:
- Получение конфиденциальной информации, такой как данные cookie
- Перенаправьте пользователя на другой сайт. URL.
К другим угрозам относятся внедрение PHP-кода, внедрение командной оболочки, внедрение кода в электронную почту и раскрытие исходного кода скриптов.
Лучшие практики безопасности PHP-приложений
Теперь давайте рассмотрим некоторые лучшие практики обеспечения безопасности PHP, которые необходимо учитывать при разработке.ping наши приложения.
PHP Strip_tags
Функция strip_tags удаляет HTML-код. JavaСценарийили PHP-теги из строки.
Эта функция полезна, когда нам необходимо защитить наше приложение от таких атак, как межсайтовый скриптинг (XSS).
Рассмотрим приложение, которое принимает комментарии от пользователей.
<?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(0);</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Перейдите к URL http://localhost/phptuts/comments.php
Теперь давайте защитим наше приложение от подобных атак, используя функцию strip_tags.
<?php $user_input = "<script>alert(0);</script>"; echo strip_tags($user_input); ?>
Перейдите к URL http://localhost/phptuts/comments.php
Функция PHP filter_var
Функция filter_var используется для проверки и очистки данных.
Валидация проверяет, имеют ли данные правильный тип. Числовая проверка строки возвращает ложный результат.
Санация – это удаление недопустимых символов из string.
Полную справочную информацию можно найти по этой ссылке: filter_var
Приведённый ниже код предназначен для системы комментариев. Он использует функцию filter_var и константу FILTER_SANITIZE_STRIPPED для удаления тегов.
<?php $user_input = "<script>alert(0);</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
Выход:
alert('Your site sucks!');
Примечание: Функция FILTER_SANITIZE_STRIPPED (псевдоним FILTER_SANITIZE_STRING) устарела начиная с PHP 8.1. Для нового кода используйте strip_tags() или, для безопасного отображения, htmlspecialchars().
PHP mysqli_real_escape_string
Функция mysqli_real_escape_string используется для защиты приложения от SQL-инъекций.
Предположим, у нас есть следующий SQL-запрос для проверки идентификатора пользователя и пароля.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Злоумышленник может войти 'ИЛИ 1 = 1 — в текстовом поле идентификатора пользователя и 1234 в текстовом поле пароля. Давайте напишем код модуля аутентификации.
<?php $uid = "0$uid1$pwd';"; echo $sql; ?>
В итоге получится следующее:
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
ВОТ,
- Проверка "WHERE uid = "" проверяет наличие пустого идентификатора пользователя.
- «ИЛИ 1 = 1» — это условие, которое всегда будет истинным.
- Символ «–» закомментирует часть кода, отвечающую за проверку пароля.
Приведённый выше запрос вернёт всех пользователей. Теперь воспользуемся функцией mysqli_real_escape_string для защиты нашего модуля авторизации. Обратите внимание, что в реальном коде эта функция принимает в качестве первого аргумента соединение с базой данных.
<?php $uid = mysqli_real_escape_string($conn, "0$uid1$pwd';"; echo $sql; ?>
Приведённый выше код выведет:
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Примечание: вторая одинарная кавычка экранирована, поэтому она будет рассматриваться как часть идентификатора пользователя, и пароль не будет закомментирован.
лучшая практика: приманкаping Это помогает, но параметризованные подготовленные запросы в mysqli или PDO являются рекомендуемой защитой от SQL-инъекций, поскольку данные никогда не смешиваются с текстом запроса.
PHP Md5 и PHP sha1
MD5 — это аббревиатура от Message Digest 5, а SHA1 — от Secure Hash Algorithm 1. Обе являются односторонними хеш-функциями.
Приведённый ниже код демонстрирует реализацию алгоритмов md5 и sha1.
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
Предположим, вы сохранили файл hashes.php в папке phptuts. Перейдите по указанному пути. URL.
Важно: MD5 и SHA1 — это быстрые хеши без добавления соли. больше не считается безопасным для хранения паролейПотому что их можно быстро взломать с помощью современного оборудования и радужных таблиц. Используйте их только для контрольных сумм, не связанных с безопасностью, а для паролей используйте описанный ниже метод.
Как безопасно хешировать пароли в PHP
Для хранения паролей PHP предоставляет функции password_hash и password_verify. Они используют медленный алгоритм с добавлением соли (по умолчанию bcrypt), поэтому каждый хеш уникален и его взлом обходится дорого, даже если ваша база данных будет украдена.
<?php // Hash a password before storing it in the database $hash = password_hash("mypassword", PASSWORD_DEFAULT); // Verify the password when the user logs in if (password_verify("mypassword", $hash)) { echo "Password is valid"; } else { echo "Invalid password"; } ?>
- пароль_хеш() Генерирует хеш с солью для хранения в базе данных; PASSWORD_DEFAULT позволяет использовать текущий рекомендуемый алгоритм.
- password_verify () Проверяет попытку входа в систему по сохраненному хешу, не расшифровывая его.
Поскольку соль и алгоритм хранятся внутри хеша, вам никогда не приходится управлять ими самостоятельно, что делает этот способ обработки паролей в PHP правильным и перспективным.




