Санируйте путь к файлу в PHP

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

    $path = "/home/gsmcms/public_html/central/app/webroot/{$_GET['file']}";


    if(file_exists($path)) {
        echo file_get_contents($path);
    } else {
        header('HTTP/1.1 404 Not Found');
    }

Первое, что пришло на ум я знаю, что вводит такой, поскольку '../../../../../../etc/passwd' была бы проблема, но задающийся вопросом, что вводит другой malcious, я должен ожидать и как предотвратить их.

27
задан SeanDowney 16 December 2009 в 00:04
поделиться

4 ответа

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

35
ответ дан 28 November 2019 в 04:37
поделиться

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

12
ответ дан 28 November 2019 в 04:37
поделиться

Здесь существует дополнительная и значительная угроза безопасности. Этот сценарий вставит источник файла в выходной поток без какой-либо обработки на стороне сервера. Это означает, что весь ваш исходный код любых доступных файлов будет пропущен в Интернет.

4
ответ дан 28 November 2019 в 04:37
поделиться

Если можете, используйте белый список как массив разрешенных файлов и сравните ввод с ним: если файл, запрошенный пользователем, отсутствует в этом списке , отклонить запрос.

6
ответ дан 28 November 2019 в 04:37
поделиться
Другие вопросы по тегам:

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