Функция безопасности PHP: Strip_tags, filter_var, Md5 и sha1.

⚡ Умное резюме

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

  • 🛡️ Ознакомьтесь с угрозами: Основные риски связаны с SQL-инъекциями, межсайтовым скриптингом и внедрением кода, обычно осуществляемыми через формы или URL параметры.
  • 🧹 Защитные бирки: strip_tags удаляет HTML-код. JavaИспользование скриптов и PHP-тегов из входных данных снижает риск межсайтового скриптинга (XSS).
  • ✅ Подтвердите ввод: Функция filter_var проверяет и очищает данные, подтверждая, что значение соответствует ожидаемому типу, прежде чем ваш код начнет ему доверять.
  • 🔒 Побег или заключение в тюрьму: Функция mysqli_real_escape_string экранирует входные данные запроса, но параметризованные подготовленные запросы являются более надежной защитой от SQL-инъекций.
  • 🔑 Хэшируйте пароли правильно: Никогда не храните пароли с использованием MD5 или SHA1; используйте функции password_hash и password_verify, которые применяют медленное хеширование bcrypt с добавлением соли.
  • Примечание: Глубокоэшелонированная защита: Объединение валидации, эскаping, HTTPS и учетные записи баз данных с минимальными привилегиями, вместо того чтобы полагаться на единый элемент управления.
  • 🤖 AI-помощь: Инструменты искусственного интеллекта могут проводить аудит PHP-кода на наличие уязвимостей безопасности и помогать безопасно устранять уязвимости, связанные с SQL-инъекциями или XSS-атаками.

PHP-безопасность

Потенциальные угрозы безопасности

В основном, существуют две группы людей, которые могут атаковать вашу систему:

  • Хакеры – с целью получить доступ к несанкционированным данным или нарушить работу приложения.
  • Пользователи могут по неосторожности вводить неверные параметры в формы, что может негативно сказаться на работе веб-сайта или веб-приложения.

Ниже приведены виды атак, на которые нам следует обратить внимание.

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

PHP Strip_tags

Предположим, вы получили в качестве пользовательского ввода следующее: 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

PHP Strip_tags

Теперь давайте защитим наше приложение от подобных атак, используя функцию strip_tags.

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo strip_tags($user_input);
 
?>

Перейдите к URL http://localhost/phptuts/comments.php

PHP Strip_tags

Функция 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.

PHP Md5 и PHP sha1

Важно: 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 правильным и перспективным.

Часто задаваемые вопросы (FAQ)

Используйте подготовленные запросы с привязанными параметрами в mysqli или PDO. Они отправляют запрос и данные отдельно, поэтому ввод пользователя никогда не сможет изменить структуру запроса. Это более надежно, чем ручное перенаправление запросов.ping вход.

Параметр strip_tags полностью удаляет HTML- и PHP-теги, а htmlspecialchars преобразует их в безопасные сущности, чтобы они отображались как текст. Для вывода escaping В борьбе с XSS-атаками обычно безопаснее использовать htmlspecialchars.

Для каждой сессии генерируется уникальный CSRF-токен, который встраивается в качестве скрытого поля в каждую форму и проверяется при отправке. Отклоняются любые запросы, токен которых отсутствует или не соответствует сохраненному значению.

Да. Искусственный интеллект может сканировать файлы на наличие SQL-инъекций, XSS-атак, небезопасного хеширования паролей и небезопасной обработки файлов, а затем описывать каждый риск и предлагать решения. Рассматривайте это как полезный первый шаг, а не как замену полной проверке безопасности.

Да. Вставьте уязвимый код, и ИИ сможет переписать его с помощью подготовленных операторов и вывести сообщение об ошибке.pingа также проверку входных данных. Протестируйте исправленный код и подтвердите правильность исправления на основе исходных входных данных атаки.

Подведем итог этой публикации следующим образом: