Вопрос по php – Отправка переменных для функций PHP FileSystem с отправкой формы

3

Я пытаюсь найти безопасный способ сделать следующее:

Users enters value into html form. Form is submitted. PHP uses submitted value as the argument for the "scandir" function.

Моя теория состоит в том, чтобы включать логику в скрипт php, который запрещает абсолютные пути и требует, чтобы имя каталога включало определенное значение.

Меня беспокоит то, что хакер может использовать мою форму, чтобы представить свою ценность и получить доступ к конфиденциальным файлам.

Это для плагина JQuery. Я не хочу, чтобы пользователям приходилось изменять файл PHP.

Как взломать код ниже?

<?php

$foo = $_POST["some_directory"];

//validate $foo

//make sure path to directory is relative
$foo_url_test  = parse_url($foo);
if (isset($foo_url_test['scheme']) || isset($foo_url_test['host'])) {
$foo = NULL;
}

//make sure the directory name contains 'bar123'
$foo_name_test = preg_split('_[\\\\/]_', $foo);
$foo_name_test = end($foo_name_test);
$foo_name_test = strpos($foo_name_test,'bar123');
if ($foo_name_test === false) {
$foo = NULL;
}

//make sure the path does not contain '..'
$foo_dot_dot_test = strpos($foo,'..');
if ($foo_dot_dot_test == TRUE || $foo_dot_dot_test === 0) {
$foo = NULL;
}

//get files
$files_array = scandir($foo);

?>
Error: User Rate Limit Exceeded deceze♦

Ваш Ответ

3   ответа
0

..

parse_url()$foo[0] == '/'?

Error: User Rate Limit Exceeded edt
2

.

$foo = realpath($foo);
if (substr($foo, 0, 8) != '/my/path') {
    return false;
}

1

Update after reply from OP

Error: User Rate Limit Exceeded edt
Error: User Rate Limit Exceeded edt

Похожие вопросы