0

サーバーに保存しているビデオがあります。

リンクを見つけた後、そのビデオにリンクできるようにしたくありません (ソースを表示)。

このような状況を処理する最善の方法は何ですか?

ありがとう、ダニー

4

3 に答える 3

4

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;
?>
于 2012-06-29T12:30:43.470 に答える
2

質問の言い回しが正しくないかもしれませんが、探しているのはホットリンクの防止だと思います。これを .htaccess に追加してください

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC]
RewriteRule \.(avi|mp4)$ - [F]

より効果的な方法は、ワンタイム リンクを使用することです。

  • ビデオをホストするページが要求されます。
  • ランダムな文字列を生成してセッションに保存し、リンクに追加します `video.php?id=10&token=9283y540983y45
  • John Conde の方法を使用して、直接アクセスを制限し、.php ファイル経由のアクセスを許可します。
  • PHP ファイルで、セッションの文字列と比較して、URL のトークンが正しいかどうかを確認します。
于 2012-06-29T12:33:29.440 に答える
1

別の方法は、認証を使用したくない(または使用できない)場合、何らかの方法でリンクを暗号化することです。これは、ジョンが回答で提案したものです。リンクが 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 をチェックするページで同じでなければならないことに注意してください。

于 2012-06-29T12:43:56.890 に答える