Вернуться   D3Scene.Ru Софт портал игр | Хаки | Проги | Статьи > Другое > Информационные технологии > Программирование > PHP
Присоединяйся к нам



Ответ
 
Опции темы Опции просмотра
Старый 06.05.2011, 20:47   #1
Местный
 
Аватар для FLaMeWaVe-
 
Регистрация: 09.02.2011
Адрес: UK,London
Сообщений: 106
Репутация: 77
Отправить сообщение для FLaMeWaVe- с помощью ICQ Отправить сообщение для FLaMeWaVe- с помощью Yahoo Отправить сообщение для FLaMeWaVe- с помощью Skype™
Автор По умолчанию

Безопасность файловой системы


PHP является одним из важных моментов в вопросе безопасности сервера, поскольку PHP-скрипты могут манипулировать файлами и каталогами на диске. В связи с этим существуют конфигурационные настройки, указывающие, какие файлы могут быть доступны и какие операции с ними можно выполнять. Необходимо проявлять осторожность, поскольку любой из файлов с соответствующими правами доступа может быть прочитан каждым, кто имеет доступ к файловой системе.

Поскольку в PHP изначально предполагался полноправный пользовательский доступ к файловой системе, можно написать скрипт, который позволит читать системные файлы, такие как /etc/passwd, управлять сетевыми соединениями, отправлять задания принтеру, и так далее. Как следствие вы всегда должны быть уверены в том, что файлы, которые вы читаете или модифицируете, соответствуют вашим намерениям.

Рассмотрим следующий пример, в коротом пользователь создал скрипт, удаляющий файл из его домашней директории. Предполагается ситуация, когда веб-интерфейс, написанный на PHP, регулярно используется для работы с файлами, и настройки безопасности позволяют удалять файлы в домашнем каталоге.

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

PHP код:
<?php
// Удаление файла из домашней директории пользователя
$username $_POST['user_submitted_name'];
$homedir "/home/$username";
$file_to_delete "$userfile";
unlink ("$homedir/$userfile");
 echo 
"$file_to_delete has been deleted!";
?>
Поскольку переменные вводятся в пользовательской форме, существует возможность удалить файлы, принадлежащие кому-либо другому, введя соответствующие значения. В этом случае может понадобиться авторизация. Посмотрим, что произойдет, если будут отправлены значения "../etc/" и "passwd". Скрипт выполнит следующие действия:

Пример 2. Атака на файловую систему

PHP код:
<?php
// Удаление любого файла, доступного из PHP-скрипта.
 // В случае, если PHP работает с правами пользователя root:
$username "../etc/";
$homedir "/home/../etc/";
$file_to_delete "passwd";
unlink ("/home/../etc/passwd");
 echo 
"/home/../etc/passwd has been deleted!";
?>
Cуществуют два решения описанной проблемы.

Ограничить доступ пользователя, с правами которого работает веб-сервер.

Проверять все данные, вводимые пользователем.

Вот улучшеный вариант кода:

Пример 3. Более безопасная проверка имени файла

PHP код:
<?php
// Удаление любого файла, доступного из PHP-скрипта.
$username $_SERVER['REMOTE_USER']; // использование авторизации

$homedir "/home/$username";

$file_to_delete basename("$userfile"); // усечение пути
unlink ($homedir/$file_to_delete);

$fp fopen("/home/logging/filedelete.log","+a"); //логируем удаление
$logstring "$username $homedir $file_to_delete";
fwrite ($fp$logstring);
fclose($fp);

 echo 
"$file_to_delete has been deleted!";
?>
Однако и такая проверка не учитывает все возможные ситуации. Если система авторизации позволяет пользователям выбирать произвольные логины, взломщик может создать учетную запись вида "../etc/" и система опять окажется уязвимой. Исходя из этого, вам может понадобиться более строгая проверка:

Пример 4. Более строгая проверка имени файла

PHP код:
<?php
 $username 
$_SERVER['REMOTE_USER']; // использование авторизации
$homedir "/home/$username";

 if (!
ereg('^[^./][^/]*$'$userfile))
      die(
'bad filename'); //завершение работы

if (!ereg('^[^./][^/]*$'$username))
      die(
'bad username'); //завершение работы
 //etc...
?>
В зависимости от используемой вами операционной системы необходимо предусматривать возможность атаки на разнообразные файлы, включая системные файлы устройств (/dev/ или COM1), конфигурационные файлы (например /etc/ или файлы с расширением .ini), хорошо известные области хранения данных (/home/, My Documents), и так далее. Исходя из этого, как правило, легче реализовать такую политику безопасности, в которой запрещено все, исключая то, что явно разрешено.
  Ответить с цитированием Наверх
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Powered by vBulletin
Copyright © 2016 vBulletin Solutions, Inc.
Перевод: zCarot | Дизайн: G-A | Верстка: OldEr
Текущее время: 06:56. Часовой пояс GMT +4.