- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 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();
}
}
zim 20.10.2012 22:19 # −4
eth0 20.10.2012 22:20 # +2
Выглядит.. глупым?
guest 30.11.2012 00:28 # 0
wvxvw 21.10.2012 00:10 # −2
scriptin 21.10.2012 02:43 # +2
Если обратиться к файлу напрямую через HTTP - выполнится, если директория доступна по HTTP и никак не защищена при помощи конфигурации сервера (скорее всего так и будет).
Кроме того, данный код уязвим, поскольку нет проверки на последовательности вроде "../../../" - можно просматривать содержимое всех доступных серверу файлов.
eth0 21.10.2012 12:27 # +1
Умеют же люди писать.
Lowezar 22.10.2012 01:03 # +1
Lure Of Chaos 22.10.2012 12:00 # +1