files UQ2gDKbJoomla может содержать большое кол-во файлов. Взаимодействие с ними: автоматическое создание имен, чтение, запись - обычное дело для некоторых компонентов Joomla. Хорошим примером в этом случае можно назвать «Медиа менеджер». При неправильном именовании файлов и обращении к ним существует опасность непредвиденных ошибок на сервере и даже дыр в безопасности. Особо нужно быть осторожным, если пользователю самому дано право менять имена файлов на сервере, либо загружить свои. Подробную информацию о уязвимости можно прочитать на сайте cwe.mitre.org.

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


jimport('joomla.filesystem.file');

Обезопасить имя файла очень просто - для этого есть универсальный метод// делаем имя файла безопасным

$safeFilename = JFile::makeSafe($unsafeFilename);


Как работает makeSafe() ? Очень просто! Он проверяет наличие в строке спецсимволов и последовательностей, Если находит что-либо подозрительное, то просто удаляет их из исходного файла.

Ниже идет перечень правил и соответствующих примеров, по которым можно примерно понять суть работы класса.
Имя не должно начинаться с точки
Удаляются точки стоящие рядом
Все символы кроме латиницы, точки, цифр, подчеркивания, пробела минуса будут удалены

Оригинальное Безопасное Комментарий
.htaccess htaccess Убирает точку в начале имени
some%20file.html some20file.html Символ (%) процент
../../traversed.file traversed.file Удаление разделителя (/) и двойных точек
spaced out.file spaced out.file Все нормально, изменений не произходило
dotty...to..the.dot dottytothe.dot Повторение символа точки (.)



Часто бывает необходимо проверить расширение файла, чтобы отказаться в загрузке подозрительных (например ".php"). В этом нам поможет метод getExt():


switch (JFile::getExt($filename)) {
case 'jpeg':
case 'jpg':
echo 'File is a JPEG';
break;
case 'gif':
echo 'File is a GIF';
break;
default:
echo 'File is not a JPEG or a GIF';
}


При необходимости можно очень просто удалить расширения в имени файла


$filenameWithoutExtension = JFile::stripExt($filename);


Таким образом можно для картинок в формате JPEG, у которых расширение может встретиться как ".jpeg", так и ".jpg", сделать небольшой сценарий, чтобы все картинки подобного формата всегда хранились с одним и тем же расширением.
$filename = JFile::stripExt($filename) . '.jpeg';


Так же полезным может оказаться метод для проверки существования файла. Например так


if (JFile::exists($filename)) {
echo "<img src=\"$filename\" alt=\"image\">";
} else {
echo JText::_("No Image File");
}

__________________________________________________________________________________________________________________

скачать joomla | обновление joomla | модуль joomla | администрирование | seo продвижение | joomla магазиншаблоны сайтов

обратная связь 

При копировании материала ссылка на сайт joomla4.ru обязательна.