- ベストアンサー
PHP ダウンロードサイトの直リンク
- PHPを使用してzipのダウンロードページを作成している際に、直接download.phpのリンクを知っている人がいた場合の対策方法について教えてください。
- 現在、phpを用いてzipのダウンロードページを作成しており、必要事項を入力してもらった上でダウンロードができる仕組みです。しかし、直接download.phpのリンクを知っている人がいた場合、urlに直接入力することでアクセスできてしまいます。この問題を解決するための方法やベストプラクティスについて教えてください。
- 現在、phpを使用してzipのダウンロードページを作成しています。しかし、直接download.phpのリンクを知っている人がいた場合、urlに直接入力することでアクセスできてしまいます。この問題を解決するための方法やリスクを避けるためのベストプラクティスについて教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
download.phpを下記のようにすれば良いと思います。 1.ダウンロードさせる対象のファイルを公開以外のローカルフォルダーに格納 →これにより直ダウンロードはできません。 2.このプログラムの中から、ダウンロードさせる対象のファイルを読み込み標準出力にはき出す。 ※下記にPDFをダウンロード(inlineで)させる例です。 //$filename には、ローカルファイルフルパス名が入っている(PDF) if( !file_exists($filename) ) { return false; } $filesize = filesize($filename); header("Content-Disposition: inline; filename=".basename($filename)); header("Content-Length: " . $filesize); header("Content-Type: application/pdf"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0,pre-check=0"); header("Pragma: private"); $handle = fopen($filename, "rb"); while (!feof($handle)) { echo fread($handle, 4096); // TimeOutさせない為 flush(); // TimeOutさせない為 } fclose($handle); return true; }
その他の回答 (1)
- BellBell
- ベストアンサー率54% (327/598)
会員制なんですよね? それなら、ログイン処理を入れてログインしていなければダウンロードできないようにしていればいいと思います。 ログインしたページに、ダウンロードできるファイルの一覧って形で表を用意しておいて、クリックするとdownload.phpに。 ログイン無しでdownload.phpを直接入力しても、ログインされていませんと表示すればOKだと思いますが。 $_SESSIONあたりを使って、ログイン情報を引き回せますよ。
お礼
ありがとうございました。
補足
すみません、会員制というのが少しオーバーな表現でした。 会員といいますか、フォームに氏名やメールアドレスを入力して頂く→結果的に会員になる という流れなので、会員と申し上げましたが、実際はログイン画面を別途用意しているわけではないのです。 説明が足らず申し訳ありません。 しかし、$_SESSIONは、何か別の方法で使えそうな気がします!
お礼
なるほど~ こういう技もあるのですね、勉強になります! すみません、まだサイトへの実装作業に取り掛かれていないので、後日実装してみます~ ありがとうございました!