Мне нужно пройти аутентификацию пользователя, чтобы просмотреть/загрузить некоторые файлы на моем сайте. Мои файлы находятся в папке с именем A внутри public_html/mySiteName/FoldesName(A)/subFolder/sample.(*.*)
. Я использовал .htaccess
, чтобы проверить подлинность пользователя или нет.Forcing Загрузка файла с использованием php-скрипта в CentOs 5.6
МОЙ .htaccess
код:
RewriteEngine on # Enable rewrite
RewriteCond %{REQUEST_FILENAME} \.*pdf$|.*psd$|.*indd$ [NC]
RewriteRule (.*) http://MySiteIp/admin_panel/auth.php?file=$1 [NC,L]
Мой загрузить сценарий выглядит следующим образом:
if($authed){
if(file_exists("../".$_GET['file'])) {
//Create the pointer to our file and open it as read-only binary data
$fp = fopen($file,'rb');
// Send headers telling browser to download our passed data
header("Content-Type: application/force-download");
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length: " . filesize($file));
header("Accept-Ranges: bytes");
header("Content-Disposition: attachment; filename=\"$file\"");
while (!feof($fp)) {
echo(@fgets($fp, 8192));
}
//Here comes the data
fclose($fp);
//and quit
exit;
} else {
echo "No file exists !!!";
}
}
Когда я проверить его на моей локальной машине с XAMPP Server, установленной на нем. Оно работает. Но на моем хосте я получаю сообщение об ошибке «NO file exists».
Пожалуйста, помогите мне найти, где я не прав ...
Просто подсказка, не дезинфицирующая $ _GET ['файл'], откроет массивную дыру в безопасности. Кто-то может передать значение типа «../../somedirectory/somefile.php», и ваш скрипт выплюнет этот файл. Вы должны удалить хотя бы $ _GET ['файл'] слэшей, прежде чем искать файл. – Nadh
Пожалуйста, помогите очистить $ _GET ['файл']. –
Быстрая и грязная дезинфекция: '$ file =! Empty ($ _ GET ['file'])? (str_replace ('/', '', $ _GET ['file'])): ''; ', а затем использовать' $ file' в 'file_exists()' – Nadh