validate_file() WP 1.2.0
Проверяет переданную строку, является ли она правильным путем к файлу (имени файла). Если проверка пройдена, вернет 0; если нет, вернет: 1, 2 или 3.
Используется для предотвращения Directory traversal атак.
✈ 1 раз = 0.000018с = очень быстро | 50000 раз = 0.01с = скорость света | PHP 7.1.2, WP 4.7.5
Хуков нет.
Возвращает
Число.
- 0 - проверка пройдена;
- 1 - означает что файл содержит ../ (Перейти в родительскую директорию). Что, переданное команде, может позволить читать/изменять файлы в родительских директориях — что неприемлемо с точки зрения безопасности;
- 2 - означает что $file содержит : вторым символом (Диск для Windows; абсолютный путь). Неприемлемо по тем же причинам;
- 3 - означает что файла нет в списке допустимых, указанных в параметре
$allowed_files
.
Использование
validate_file( $file, $allowed_files );
- $file(строка) (обязательный)
- Путь до файла.
- $allowed_files(массив)
- Список допустимых файлов, которым должна соответствовать переменная $file.
По умолчанию: ''
Примеры
#1 Демонстрация проверок пути файлов
Путь, который пройдет проверку:
$path = 'uploads/2012/12/my_image.jpg'; echo validate_file( $path ); // выведет 0 (допустимый путь)
Путь, который не пройдет проверку:
$path = '../../wp-content/uploads/2012/12/my_image.jpg'; echo validate_file( $path ); // выведет 1 (недоступный путь)
Заметки
Будьте внимательны при проверке возвращаемого результата, т.к. если проверка пройдена, то функция вернет 0, а если не пройдена то вернет число. Поэтому проверять стоит как-то так:
if( validate_file( $file ) === 0 ) echo 'проверка пройдена'; else echo 'проверка не пройдена';
Список изменений
С версии 1.2.0 | Введена. |
Код validate file:
wp-includes/functions.php
WP 5.3
Cвязанные функции
Из метки: validate (проверка)
Еще из раздела: Очистка данных
- esc_attr()
- esc_html()
- esc_js()
- esc_textarea()
- esc_url()
- esc_url_raw()
- sanitize_email()
- sanitize_file_name()
Насчёт заметки. Можно и так тогда:
Да можно, но это неявно. А для такой нестандартной функции лучше наверное подчеркнуть, что 0 - значит все ОК, чтобы по коду это было сразу понятно...
Согласен!