Учебники

19) PHP безопасность

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

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

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

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

SQL-инъекция — этот тип атаки добавляет вредоносный код к операторам SQL .

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

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

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

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

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

Рекомендации по безопасности приложений PHP

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

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

Функция безопасности PHP

Предположим, что вы получили следующее в виде пользовательского ввода <script> alert (‘Your site sucks!’); </ Script>

<?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.

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo strip_tags($user_input);

?>

Перейдите по URL-адресу http: //localhost/phptuts/comments.php

Функция безопасности PHP

Функция PHP filter_var

Функция filter_var используется для проверки и очистки данных.

Валидация проверяет, имеют ли данные правильный тип. Проверка числовой проверки строки возвращает ложный результат.

Санитарная обработка удаляет недопустимые символы из строки.

Проверьте эту ссылку для полной ссылки 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

Функция безопасности PHP

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

Резюме

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