Загрузить любой файл в PHP с безопасностью - PullRequest
0 голосов
/ 13 марта 2019

Я хочу сделать центр загрузки и разрешить загружать все файлы (даже .php, .bat, ....) Но мне нужно сделать что-то, что не может быть запущено, например, пользователь загружает файл index.php'in' site.com/20190520/52.php ', тогда я хочу, чтобы, если все переходят на' site.com/20190520/52.php ', PHP-код не запускался, на самом деле все могут только загрузить и не могут его запустить.

другой пример: я загружаю 'a.html' в 'https://cdn.discordapp.com/attachments/433604751326838794/555138662237732894/a.html', и если вы идете сюда, он не работает, я хочу это сделать.

Совет: я думаю, что мы должныизменить заголовок файла, но как?

1 Ответ

0 голосов
/ 13 марта 2019

Как и предполагалось, вы можете хранить его в частном каталоге, в идеале где-нибудь вне WEB_ROOT вашего сервера. Несколько вещей, чтобы рассмотреть с этим подходом.

  1. Убедитесь, что разрешения файловой системы правильно установлены для этого каталога.
  2. При обработке запросов на файл, site.com/20190520/52.php убедитесь, что вы защищаете от обхода каталога. т.е. убедитесь, что злоумышленник не может сделать что-то вроде site.com/20190520/../../../../../../etc/passwd

  3. Если каждый файл не будет доступен всем, обязательно подумайте, как вы планируете аутентифицировать / авторизовать запросы.

Вы также можете рассмотреть подход к этому с системного уровня. Сохраните файлы в частном каталоге и установите отдельный веб-сервер (vhost и т. Д.) На поддомене, который будет обслуживать файлы. Он может быть настроен так, чтобы не выполнять никаких файлов. Ваш веб-сервер (nginx, apache и т. Д.) Будет определять, как вы это настроите.

Еще одна мысль может заключаться в использовании службы CDN. Эти сервисы предоставят вам API, поэтому ваш пользователь загрузит файл, вы получите его на свой сервер и отправите в CDN. В зависимости от требуемой производительности, это может быть самый простой и быстрый вариант, который будет хорошо масштабироваться.

...