私のサイトのファイルのいくつかを表示/ダウンロードするには、ユーザーを認証する必要があります。私のファイルは、public_html/mySiteName/FoldesName(A)/subFolder/sample.(*.*)
の中のAというフォルダにあります。私は.htaccess
を使って、ユーザーが認証されているかどうかをチェックしました。CentOSでPHPスクリプトを使用してファイルをダウンロードする5.6
MY .htaccess
コード:私はそれにインストールXAMPPのサーバーと私のローカルマシン上でそれをテストする場合
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 !!!";
}
}
:
RewriteEngine on # Enable rewrite
RewriteCond %{REQUEST_FILENAME} \.*pdf$|.*psd$|.*indd$ [NC]
RewriteRule (.*) http://MySiteIp/admin_panel/auth.php?file=$1 [NC,L]
マイダウンロード・スクリプトは次のようになります。できます。しかし、私のホストでは、 "NO file exists"というエラーメッセージが表示されます。
私が間違っている場所を見つけるために私を助けてください...
$ _GET ['file']をサニタイズしないだけのヒントは、大規模なセキュリティホールを開くでしょう。誰かが '../../somedirectory/somefile.php'のような値を渡すことができ、あなたのスクリプトはそのファイルを吐き出すでしょう。ファイルを調べる前に、少なくとも$ _GET ['file']のスラッシュを取り除いてください。 – Nadh
$ _GET ['file']の衛生管理にお役立てください。 –
素早く汚れた衛生化: '$ file =!empty($ _ GET ['file'])?あなたのウェブホストはFolderNameまで似たように見えますか?(A(str_replace( '/'、 '、$ _GET [' file '])):' '; 'そして、' file_exists() 'で' $ file'を使用してください。 – Nadh