2012-04-27 27 views
0

私のサイトのファイルのいくつかを表示/ダウンロードするには、ユーザーを認証する必要があります。私のファイルは、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"というエラーメッセージが表示されます。

私が間違っている場所を見つけるために私を助けてください...

+0

$ _GET ['file']をサニタイズしないだけのヒントは、大規模なセキュリティホールを開くでしょう。誰かが '../../somedirectory/somefile.php'のような値を渡すことができ、あなたのスクリプトはそのファイルを吐き出すでしょう。ファイルを調べる前に、少なくとも$ _GET ['file']のスラッシュを取り除いてください。 – Nadh

+0

$ _GET ['file']の衛生管理にお役立てください。 –

+0

素早く汚れた衛生化: '$ file =!empty($ _ GET ['file'])?あなたのウェブホストはFolderNameまで似たように見えますか?(A(str_replace( '/'、 '、$ _GET [' file '])):' '; 'そして、' file_exists() 'で' $ file'を使用してください。 – Nadh

答えて

1

私はこの質問をする前にあなたはecho "here"; die();を削除推測するつもりです。

ローカルマシンとウェブホストのファイル構造は同じですか?

ファイルは実際には../ですか?ファイルの絶対パスを使用してみてください。/home/youruser/public_html /またはホストのディレクトリ構造が何であっても。

+0

)\ SubFolder \? – ChrisG

+0

はいこれはFolderName(A)/ SubFolder/ –

+0

です。絶対パスを使用してください(例: '/ home/username/public_html/FolderName(a)/ SubFolder/file')。 – ChrisG

関連する問題