Двойное расширение обойдет правила проверки расширения - PullRequest
2 голосов
/ 09 января 2012

Во многих статьях о безопасности загрузки файлов говорится, что лучше подготовить белый список расширений, а не черный список. Но, похоже, у этого метода есть проблемы с файлами с двойным расширением. Например, у меня есть белый список, такой как «pdf», «doc», «docx», но этот белый список возвращает true для apple.php.doc или apple.doc.php.

Как я могу написать функцию проверки безопасного расширения?

Ответы [ 2 ]

3 голосов
/ 09 января 2012

Используйте этот код для проверки правильности расширения:

$valid_exts = array('doc', 'pdf');
if (in_array(pathinfo($filename, PATHINFO_EXTENSION), $valid_exts)) {
     // everything is fine
} else {
     // not fine
}
0 голосов
/ 09 января 2012

Вы должны попытаться понять причины этого, ваш вопрос не имеет никакого смысла.

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

этого не происходит для .php.doc, потому что расширение по-прежнему .doc, и сервер будет обрабатывать его следующим образом.

Стоит отметить, что можно настроить веб-сервер так, чтобы он не выполнял определенные файлы в каталоге, но это не по умолчанию, и мало кто на самом деле делает это.

...