文書化されていないsecure_link機能になるために、このメモを書くことを勧めました。
概して、理論はありましたが、応用例はほとんどありませんでした。
したがって、私は状況をわずかに修正し、私の小さな開発を共有することにしました。
ソースデータ。
- ビデオリソースが保存される専用サーバー
- ucoz.ruのウェブサイト。
追加の制限:ucoz.ru-HTML + JavaScriptのみ。 php、perl、pythonなどはありません。 など
現時点では、ucozのuppodプレーヤーには専用サーバーからのビデオへの直接リンクが含まれています。 それに応じて、多少なりとも知識のあるユーザーであれば、好きな映画を問題なく簡単にダウンロードできます。
割り当て:
- 専用サーバーで資料を保護し、オンラインでのみ視聴できるようにします。
まず、インターネット上で調べてみると、試用版にインストールされて完全に機能するsecure_linkモジュールを発見しました 。 しかし、顧客がビデオファイルを巻き戻すことを望んだ後、小さな問題にぶつかりました。 具体的には、パラメータを持つHTTP GETメソッドが巻き戻しに使用され、 secure_linkはデフォルトで 、指定された場所の後の行全体のハッシュを考慮します 。
このように:
- /prefix/hash/video.flvおよび
- /prefix/hash/video.flv?start=123321234
-ハッシュが異なります。
グーグルの数分後、secure_linkを放棄し、独自にハッシュを整理することに決めました(つまり、他のnginxモジュールを使用して)
このために、ngx_devel_kit [1]とngx_http_set_hash [2]がダウンロードされ、コンパイルされました。
次に、特定の方法で場所を構成しました。
location ~ /secure/(.*)/(X-FACTOR-EYYRBBFHR64534)/(.*) {
flv;
set $secret_value "JOP3zneXLjM";
set $hash_value $1;
set_md5 $secret_hash $2$secret_value;
set $value $3;
if ($hash_value != $secret_hash) { rewrite ^ /error.html break; }
rewrite ^ /X-FACTOR-EYYRBBFHR64534/$value?$args break;
}
location /X-FACTOR-EYYRBBFHR64534 { flv; internal; }
これらの操作の後、ファイルはハッシュされず、ディレクトリがファイル引数が正常に渡され、それに応じて巻き戻しが機能するため、URL形式が少し変更されました。 はい、理論的には、これは省略です。ディレクトリのハッシュを知っているので、その中にあるすべてのファイルをダウンロードできますが、2年間の仕事の先例はありませんでした+ それは原則として、顧客にすでに満足していました。
プレイリストを形成する
アップポッドではプレイリストがパラメーターとして渡されるため、ハッシュに従って動的な構成を処理する必要がありました。 サイトでhtml + javascriptのみを使用する機会があることをお知らせします。 顧客との簡単な協議の後、次のソリューションが開発されました。
PHPスクリプトは、既製のプレーヤーオブジェクトを形成し、それをiframe-eに表示する専用サーバーの側から呼び出されます。 このサイトでは、次の内容のJavasciptを紹介しています。
function loadPlayer(p) {var D = new Date(); var T = D.getTime();document.write("");}
そして、単純なloadPlayer( "X-FACTOR-EYYRBBFHR64534")によって呼び出されます。
Main.phpは次のようになります(最適ではありませんが機能しています)。
<?php
header("Pragma: no-cache");
header("Cache-Control: no-cache,must-revalidate");
require "secret.php";
$value = "st=http://SITE/uppod/video7-1005.txt&pl=";
$value = $value . "http://HOST/secure/playlists/";
if(preg_match("/SITE/i",$_SERVER["HTTP_REFERER"]))
{ $value = $value . md5($_GET["playlist"].".txt".$secret); }
$value = $value . "/".$_GET["playlist"].".txt&poster=";
?>
<object id="videoplayer113031" type="application/x-shockwave-flash" data=http://SITE/uppod/uppod.swf width="500" height="650">
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
<param name="wmode" value="transparent" />
<param name="movie" value="http://SITE/uppod/uppod.swf" />
<param name="flashvars" value="<?php echo $value; ?>" />
</object>
その結果、保護されたリンク上のビデオコンテンツを巻き戻し機能付きで表示できる作業サーバーがあり、1年以上中断することなく機能しています。
PS
1.ngx_devel_kit: github.com/simpl/ngx_devel_kit
2. ngx_http_set_hash: github.com/simpl/ngx_http_set_hash