7

php/.htaccessを使用してQuickTimeストリーミングビデオをパスワードで保護するための最良の方法は何ですか。それらはrtspを使用してストリーミングされていますが、必要に応じて他の形式を使用できます。

PHPで認証を行う方法は知っていますが、ユーザーがURLをコピーして共有できないように、ストリーミングファイルのURLを保護するように認証を設定する方法がわかりません。

または、これを考えすぎて、通常の認証スキームを使用して、保護されたディレクトリにファイルを配置することができますか?

4

4 に答える 4

6

nginx と lighttpd の両方の Web サーバーには、PHP から返すことができる X-Send-File ヘッダーがあります。そのため、PHP でチェックを行い、条件付きでファイルをサーバーに送信できます。

if (check_user_can_access()){
    header('X-sendfile: /path/to/file');
} else {
    header('HTTP/1.1 403 Fail!');
}

Lighttpd にはmod_secure_downloadと呼ばれる優れたモジュールもあり、短期間だけ有効な URL をプログラムで生成できます。

Nginx、および場合によっては lighttpd を使用すると、ダウンロード速度を制限できるため、ストリーミング データが消費されるよりも速く送信されることはありません。

いずれにせよ、ファイルを提供するために Web サーバーを使用する必要があります。PHP を介してそれらを提供することは可能ですが、時間がかかります。

于 2008-11-13T13:20:51.020 に答える
1

あなたは見てみたいかもしれません: mod_xsendfile(apache用)

これにより、内部でファイルにリダイレクトできます。

したがって、ダウンロードリンクをcheckCredentials.php

<?php
if ( isAuthorised($_POST['user'], $_POST['pass']) ) {
    header("X-Sendfile: $somefile");
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; file=\"$somefile\"");
    exit(0);
} else {
    show403('bad credentials');
}
?>

このモジュールは、他のWebサーバーでも使用できます。私の記憶が正しければ、このアイデアは元々lighttpdから来ていますが、Joshが述べているようにnginxでも利用できます。

于 2008-11-13T13:33:35.157 に答える
1

Amazon S3 サービスを使用してみてください。癖がありますが、慣れれば理にかなっています。

API には、指定された時間だけアクティブな URL を一時的に取得するためのフックがあるため、10 分ほど後には機能しなくなるため、訪問者に URL を自由に表示できます。

php (約 15 行のコード) を使用するのはほとんど簡単なことです。フォーラムには多くの例があるため、これを達成する方法についてゼロから行って完全なドキュメントを読む必要はありません。

リンクを生成して表示する前に、どのような認証を行うかはあなた次第です。

標準の s3 URL ではなく、video.yourdomain.com のようなドメインから提供されているように見せることもできます。

最後に、安いです。8 GB をアップロードして 3 回完全にダウンロードし、ダウンロードを約 100 回初期化したときに、テストと展開の月に約 2 米ドルを支払いました。私がこれを行っていた人は、価格に非常に満足しているため、ダウンロード可能なメディアをすべて s3 に移行したいと考えています。

今、私が書いたものをすべて読み直すと、コマーシャル/スパムのように見えますが、以前にオーディオファイル用にすべてをコーディングしたため、サービスに非常に満足しており、すべてがうまく機能するまでに数日かかり、実装に数時間かかりました (ほとんどの場合サービスに詳しい)。

于 2008-11-13T07:40:01.133 に答える
0

まず、リファラーを偽装するのは非常に簡単です。この情報はユーザーのブラウザーに保存されるため、ユーザーは単にサーバーに telnet で接続し、ドメインに一致する独自のリファラーを提供できます。

あなたが試すことができるいくつかのこと:

まず、より安全ですが、スプーフィング可能です。mod_rewrite は、Cookie をチェックする機能を提供します。できることは、ユーザーが不明瞭なデータを含む Web サイトにアクセスしたときに Cookie を設定することです。次に、RerwriteCond を次のように変更できます。

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_COOKIE} obscurename=obscurevalue [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC]
RewriteRule \.(asx¦ASX)$ http://www.yourdomain.com/images/leech.gif [R,L]

もう 1 つの優れた手法は、PHP と MIME タイプを使用することです。これがストリーミング コンテンツをどの程度サポートするかはわかりませんが、うまくいくと思います。できることは、すべての動画リンクが .php ファイルを指すようにすることです (クエリ文字列によって、どの動画が選択されたかが決まります)。次に、ユーザーがこのリンクにアクセスしようとすると、次のようにします。

<?php
    // You could also check some sort of session variable
    // that is set when the user visits another part of your
    // site
    if(!isLoggedIn()){
       header("Location: errorPage.htm");
       exit;
    }else{
       // Get the name of the file specified
       $file = get_file_name($_GET['fileID']);

       // Specify the proper mime-type for the data you're sending
       // (this may have to change, depending on your situation)
       header("Content-type: video/vnd.rn-realvideo");

       // Read the file and output it to the browser
       readfile($file);
    }
?>

私が読んだところによると、ほとんどのサーバーはどの MIME タイプがストリーミング MIME タイプであるかを認識しているため、ブラウザはストリーミング ファイルを適切に処理する方法を理解できるはずです。

于 2008-11-13T05:11:44.723 に答える