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

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

По сути, это две группы людей, которые могут атаковать вашу систему.

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

Фоллоwing — это виды атак, на которые нам нужно обратить внимание.

SQL-инъекция – Этот тип атаки добавляет вредоносный код к SQL заявления.

Это делается с помощью пользовательских форм ввода или URL-адресов, использующих переменные.

Прилагаемый код комментирует условие в предложении WHERE оператора SQL. Прилагаемый код также может;

  • вставьте условие, которое всегда будет истинным
  • удалить данные из таблицы
  • обновить данные в таблице
  • Этот тип атаки обычно используется для получения несанкционированного доступа к приложению.

Межсайтовый скриптинг – этот тип атаки включает в себя вредоносный код, обычно JavaScript. Это делается с помощью пользовательских форм ввода, таких как формы обратной связи и комментариев. Это сделано для того;

  • Получение конфиденциальной информации, такой как данные файлов cookie
  • Перенаправьте пользователя на другой URL-адрес.
  • Другие угрозы могут включать в себя внедрение кода PHP, внедрение оболочки, Email Внедрение, раскрытие исходного кода скрипта и т. д.

Рекомендации по обеспечению безопасности 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;

?>

Предполагая, что вы сохранили comment.php в папке phptuts, перейдите по URL-адресу.http://localhost/phptuts/comments.php

PHP Strip_tags

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

PHP Strip_tags

Давайте теперь защитим наше приложение от таких атак с помощью функции Strip_tags.

<?php

$user_input = "<script>alert('Your site sucks!');</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('Your site sucks!');</script>";

echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);

?>

Вывод:

alert('Your site sucks!');

Функция mysqli_real_escape_string Эта функция используется для защиты приложения от SQL-инъекций.

Предположим, что у нас есть следующееwing Оператор SQL для проверки идентификатора пользователя и пароля.

<?php
SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass';
?>

Злонамеренный пользователь может ввести следующееwing код в тексте идентификатора пользователя box. ' ИЛИ ​​1 = 1 — И 1234 в тексте пароля box Давайте напишем модуль аутентификации

<?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 * FROMusers 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-адресу.

PHP Md5 и PHP sha1

Как вы можете видеть из приведенных выше хэшей, если злоумышленник получит доступ к вашей базе данных, он все равно не будет знать пароли для входа в систему.

Итоги

  • Безопасность — это меры, принятые для защиты приложения от случайных и злонамеренных атак.
  • Функция Strip_tags используется для удаления тегов, таких как из входных данных
  • Функция filter_var проверяет и очищает входные данные PHP
  • mysqli_real_escape_string используется для очистки оператора SQL. Удаляет вредоносные символы из утверждений
  • и MD5, и SHA1 используются для шифрования пароля.