(PHP 3>= 3.0.17, PHP 4 >= 4.0.3)
is_uploaded_file - сообщает, был ли файл загружен через HTTP POST. Описание
bool is_uploaded_file (string filename) Возвращает TRUE, если файл filename был загружен через HTTP POST. Это помогает убедиться, что злонамеренный
пользователь не пытался заставить скрипт работать с файлами, с которыми он работать не должен, например,
/etc/passwd. Этот вид проверки особенно важен, когда есть вероятность того, что
некоторые действия с загруженными файлами могут дать доступ к их содержимому
пользователю или даже другим пользователям той же системы.
is_uploaded_file() доступна только в версиях PHP 3 после PHP 3.0.16 и в версиях PHP 4
после 4.0.2. Если вы продолжаете использовать ранние версии, вы можете
использовать следующую функцию, которая поможет вам защититься: Примечание:
следующий пример не будет работать в версиях PHP 4 после 4.0.2. Это зависит от внутренней функциональности PHP, которая была изменена после
указанной версии.
<?php
/* Проверка загруженного файла. */
function is_uploaded_file($filename) {
if (!$tmp_file = get_cfg_var('upload_tmp_dir')) {
$tmp_file = dirname(tempnam('', ''));
}
$tmp_file .= '/' . basename($filename);
/* User might have trailing slash in php.ini... */
return (ereg_replace('/+', '/', $tmp_file) == $filename);
}
/* Вот как использовать её, поскольку вы также не имеете
* move_uploaded_file() в этих старых версиях: */
if (is_uploaded_file($HTTP_POST_FILES['userfile'])) {
copy($HTTP_POST_FILES['userfile'], "/place/to/put/uploaded/file");
} else {
echo "Possible file upload attack: filename '$HTTP_POST_FILES[userfile]'.";
}
?> |
См. также в move_uploaded_file() и в разделе Обработка загрузки файлов
пример простого использования. |