サーバーに保存しているビデオがあります。
リンクを見つけた後、そのビデオにリンクできるようにしたくありません (ソースを表示)。
このような状況を処理する最善の方法は何ですか?
ありがとう、ダニー
サーバーに保存しているビデオがあります。
リンクを見つけた後、そのビデオにリンクできるようにしたくありません (ソースを表示)。
このような状況を処理する最善の方法は何ですか?
ありがとう、ダニー
Webルートに保存しないでください。Webルートの外部に保持し、PHPファイルを介して参照します。そのファイルは、ユーザーを認証して、ユーザーがビデオを表示できるようにし、ユーザーがビデオを表示できるようにすることを確認します。そうしないと、ビデオが読み込まれないか、代わりにエラーメッセージが読み込まれます。
HTML:
<a href="video.php">Watch the video</a>
サンプルPHP(video.php):
<?php
if (!isset($_SESSION['authenticated']))
{
exit;
}
$file = '/path/to/file/outside/www/secret.avi';
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, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
?>
質問の言い回しが正しくないかもしれませんが、探しているのはホットリンクの防止だと思います。これを .htaccess に追加してください
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC]
RewriteRule \.(avi|mp4)$ - [F]
より効果的な方法は、ワンタイム リンクを使用することです。
別の方法は、認証を使用したくない(または使用できない)場合、何らかの方法でリンクを暗号化することです。これは、ジョンが回答で提案したものです。リンクが 1 時間ごとに変わると、共有が難しくなります。
現在の時間 (および日) から md5 ハッシュなどを使用すると、発見されたリンクは約 2 時間後に使用できなくなります。なぜ2つ?リンクが 12:59:59 に生成される状況を処理する必要があるため、クライアントのブラウザーがリソースにアクセスしようとすると、リンクは無効になります。そのような状況を防ぐには、現在の時間が一致しない場合は、前の時間が URL と一致するかどうかを確認する必要があります。
URL でハッシュを使用するのが難しすぎる場合は、パラメーターが必要な場合があります。また、John が回答で示したのと同様のコードを使用します。
したがって、シナリオは次のようになります。
クライアントがページをフェッチします。サーバーは、ビデオへのリンクを配置する必要があります。であることを確認し、ハッシュを計算する2012-06-29 14:55:30
ようなものとしてその日付を取得し、次のような2012-06-29T14:5_:__
URL を作成します。href="/videos/736453273dh367d52gs82/movie.mpg"
クライアントのブラウザーがリソースをダウンロードするため、サーバーはこれらの奇妙な番号を含むその URL への要求を受け取ります。サーバーは時間をチェックし、それが であることを発見します2012-06-29 14:55:31
。最後の 3 桁をクリアし (1 時間では長すぎると思うため)、 からハッシュを作成し2012-06-29T14:5_:__
ます。クライアントから提供された URL と一致していますか? はい。次に、ファイルを提供します。
URL が一致しない場合、サーバーは時間を 1 つ減らしてエンコードを試み2012-06-29T14:4_:__
ます。これも一致しない場合は、エラー コードを返します。
したがって、約 20 分間しか機能しないリンクがあります。ニーズに適した時間範囲を決定できます。ただし、そのリンクを取得した人は、その期間中は誰でも使用できることを忘れないでください。また、そのハッシュを生成するために取得するものにも注意してください。それが唯一の時間である場合、そのスキームが推測可能になるリスクがあります。ランダムなソルトを使用しますが、URLを生成するページと URL をチェックするページで同じでなければならないことに注意してください。