Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!
Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!
Joomla может содержать большое кол-во файлов. Взаимодействие с ними: автоматическое создание имен, чтение, запись - обычное дело для некоторых компонентов Joomla. Хорошим примером в этом случае можно назвать «Медиа менеджер». При неправильном именовании файлов и обращении к ним существует опасность непредвиденных ошибок на сервере и даже дыр в безопасности. Особо нужно быть осторожным, если пользователю самому дано право менять имена файлов на сервере, либо загружить свои. Подробную информацию о уязвимости можно прочитать на сайте cwe.mitre.org.
Статический класс JFile, который предоставляет нам встроенная библиотека из набора Joomla. Подключить библиотеку можно с помощью следующей строки.
Обезопасить имя файла очень просто - для этого есть универсальный метод
Как работает 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():
При необходимости можно очень просто удалить расширения в имени файла
Таким образом можно для картинок в формате JPEG, у которых расширение может встретиться как ".jpeg", так и ".jpg", сделать небольшой сценарий, чтобы все картинки подобного формата всегда хранились с одним и тем же расширением.
Так же полезным может оказаться метод для проверки существования файла. Например так