RuCore.NET

Защита в системе хостинга





Пример #1 Недостаточная проверка внешних данных ведет к…

<?php
// Удаление файла из домашней директории пользователя
$username = $_POST[‘user_submitted_name’];
$userfile = $_POST[‘user_submitted_filename’];
$homedir = «/home/$username»;
unlink(«$homedir/$userfile»);
echo «Файл был удален!»;
?>



Поскольку переменные вводятся в пользовательской форме, существует возможность удалить файлы, принадлежащие кому-либо другому, введя соответствующие значения. В этом случае может понадобиться авторизация. Посмотрим, что произойдет, если будут отправлены значения «../etc/» и «passwd». Скрипт выполнит следующие действия:
Пример #2 … атаке на файловую систему

<?php
// Удаление любого файла, доступного из PHP-скрипта.
// В случае, если PHP работает с правами пользователя root:
$username = $_POST[‘user_submitted_name’]; // «../etc»
$userfile = $_POST[‘user_submitted_filename’]; // «passwd»
$homedir = «/home/$username»; // «/home/../etc»
unlink(«$homedir/$userfile»); // «/home/../etc/passwd»
echo «Файл был удален!»;
?>

Cуществуют две важные меры, которые можно предпринять для предотвращения описанной проблемы.
Ограничить доступ пользователя, с правами которого работает веб-сервер с PHP.
Проверять все данные, вводимые пользователем.
Вот улучшеный вариант кода:
Пример #3 Более безопасная проверка имени файла

<?php
// Удаление любого файла, к которому имеет доступ пользователь,
// под которым запущен PHP.
$username = $_SERVER[‘REMOTE_USER’]; // использование авторизации
$userfile = basename($_POST[‘user_submitted_filename’]);
$homedir = «/home/$username»;
$filepath = «$homedir/$userfile»;
if (file_exists($filepath) && unlink($filepath)) {
$logstring = «$filepath удаленn»;
} else {
$logstring = «Не удалось удалить $filepathn»;
}
$fp = fopen(«/home/logging/filedelete.log», «a»);
fwrite($fp, $logstring);
fclose($fp);
echo htmlentities($logstring, ENT_QUOTES);
?>



Поделись статьей с друзьями


65 просмотров



Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: