21 Март

Безопасная загрузка файлов

При загрузке пользовательских файлов вам на сервер, они могут содержать вредоносный код, и это может привезти даже к полному краху вашего сайта. Как же это избежать? Есть два способа:

  1. Смотрим mime type в $_FILES и разрешай загрузку только нужных типов данных. Спасёт только от неопытных взломщиков, поскольку проверка по mime-типу вещь достаточно бесполезная, потому что он отдается от пользователя, в виде текстовой строки в пост-запросе. Подменяется на раз чем угодно, любым средством отправки пакетов -скриптом, виндовой прогой, плагином к браузеру и т.д.
  2. Используем следующий скрипт, который загружает файл, проводит хэш-поиск, проверку и переименование:

if (!empty($_FILES['filename']['tmp_name']))
{
// Формируем путь к файлу
$path = “files/”.date(”YmdHis”,time());
// Если оператор пожелал переименовать файл - переименовываем
if($_POST['chk_rename'] == “on”)
{
// Проверяем, чтобы не было прямых и обратных слешей
$_POST['rename'] = str_replace(”\\”,”",$_POST['rename']);
$_POST['rename'] = str_replace(”/”,”",$_POST['rename']);
$_POST['rename'] = stripcslashes($_POST['rename']);
$path = “files/”.substr($_POST['rename'], 0, strrpos($_POST['rename'], “.”));
}

// Проверяем, не является ли файл скриптом
$extentions = array(”#\.php#is”,
“#\.phtml#is”,
“#\.php3#is”,
“#\.html#is”,
“#\.htm#is”,
“#\.hta#is”,
“#\.pl#is”,
“#\.xml#is”,
“#\.inc#is”,
“#\.shtml#is”,
“#\.xht#is”,
“#\.xhtml#is”);
// Извлекаем из имени файла расширение
$ext = strrchr($_FILES['filename']['name'], “.”);
$add = $ext;
foreach($extentions AS $exten)
{
if(preg_match($exten, $ext)) $add = “.txt”;
}
$path .= $add;

// Перемещаем файл из временной директории сервера в
// директорию /files Web-приложения
if (copy($_FILES['filename']['tmp_name'], “../”.$path))
{
// Уничтожаем файл во временной директории
@unlink($_FILES['filename']['tmp_name']);
// Изменяем права доступа к файлу
@chmod(”../”.$path, 0644);
}
else
{
links (”Нет файла для загрузки”);
}

2-й метод на порядок более предпочтителен из-за 100% надёжности, но требует больше усилий.

Постовой: Сделайте своей девушке приятное, на заработанные на загрузчике деньги, купите ей красивое бельё фирмы Lauma


Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Оставить комментарий

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

© 2010 PHP F.A.Q.