Безопасная загрузка файлов
При загрузке пользовательских файлов вам на сервер, они могут содержать вредоносный код, и это может привезти даже к полному краху вашего сайта. Как же это избежать? Есть два способа:
- Смотрим mime type в $_FILES и разрешай загрузку только нужных типов данных. Спасёт только от неопытных взломщиков, поскольку проверка по mime-типу вещь достаточно бесполезная, потому что он отдается от пользователя, в виде текстовой строки в пост-запросе. Подменяется на раз чем угодно, любым средством отправки пакетов -скриптом, виндовой прогой, плагином к браузеру и т.д.
- Используем следующий скрипт, который загружает файл, проводит хэш-поиск, проверку и переименование:
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