Поздравления, я надеюсь сделать свою крошечную программу безопасной так, чтобы потенциальные злонамеренные пользователи не могли просмотреть чувствительные файлы на сервере.
$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, я должен ожидать и как предотвратить их.
realpath () позволит вам преобразовать любой путь, который может содержать относительную информацию, в абсолютный путь ... затем вы можете убедиться, что путь находится в определенном подкаталоге, который вы хотите разрешить скачивается с.
Используйте базовое имя вместо того, чтобы пытаться предугадать все небезопасные пути, которые может предоставить пользователь.
Здесь существует дополнительная и значительная угроза безопасности. Этот сценарий вставит источник файла в выходной поток без какой-либо обработки на стороне сервера. Это означает, что весь ваш исходный код любых доступных файлов будет пропущен в Интернет.
Если можете, используйте белый список как массив разрешенных файлов и сравните ввод с ним: если файл, запрошенный пользователем, отсутствует в этом списке , отклонить запрос.