"PHP" / Говнокод #11965 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
<?php 
if (isset($_GET['file'])) {
	$dirname = 'download';
	$file = (string) $_GET['file'];
	$file = $dirname . DIRECTORY_SEPARATOR . trim($file);
	if (is_file($file)) {
		header('Content-Description: File Transfer');
		header('Content-Type: application/octet-stream');
		header('Content-Disposition: attachment; filename=' . basename($file));
		header('Content-Transfer-Encoding: binary');
		header('Expires: 0');
		header('Cache-Control: must-revalidate');
		header('Pragma: public');
		header('Content-Length: ' . filesize($file));
		ob_clean();
		flush();
		readfile($file);
		exit();
	}
}

вопрос:
Нужно чтобы при клике по ссылке запускалось скачивание файла, но ссылка должна быть не прямая как site.ru/download/file1.rar
- а вот такая: site.ru/download/1/

ответ:
создайте файл download.php и папку download для файлов.
использовать так: localhost/download.php?file=01.jpg

Запостил: ahref ahref, (Updated )

Комментарии (8) RSS

  • А что будет, если в download положить PHP скрипт какой-нибудь, выполнится или нет?
    Ответить
    • Через такой скрипт - не выполнится.

      Если обратиться к файлу напрямую через HTTP - выполнится, если директория доступна по HTTP и никак не защищена при помощи конфигурации сервера (скорее всего так и будет).

      Кроме того, данный код уязвим, поскольку нет проверки на последовательности вроде "../../../" - можно просматривать содержимое всех доступных серверу файлов.
      Ответить
      • Подобная дырка была в каком-то веб-обменнике, который позволял качать любые файлы. Я посмотрел, нашёл конфиги и выкачал и их тоже. В следующих версиях баги не было, но появились другие, не менее сочные: возможность использования обменника как прокси, сливать файлы данных обменника с пользователями-паролями.
        Умеют же люди писать.
        Ответить
  • Да ну это же просто пример элементарной качалки, чтоб поняли идею. Что не так? Ясен пень что надо подобавлять проверки, разбор ссылок, и прочие ингридиенты по вкусу, не будут же в ответе на вопрос за тебя готовый код писать.
    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8