一回も披露したことのない豆知識

画像と動画の有料サイトを作成しています。
HTMLに動画再生のためのコードを記述しています。
************************
<object id=sound1 classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" width=700 height=500>
<param name="url" value="contents/movie1.wmv">
<param name="uimode" value="full">
<param name="autostart" value="false">
<param name="mute" value="false">
<embed src="contents/movie1.wmv" type="application/x-mplayer2" showcontrols="1" showaudiocontrols="1" showpositioncontrols="1" showtracker="1" width=700 height=500 autostart="0" clicktoplay="1" mute="0">
</object>
************************
また.htaccessで
************************
SetEnvIf Referer "●●●" ref_ok  ※はドメイン名
order deny,allow
deny from all
allow from env=ref_ok
************************
と制限をかけると、画像は直リンク禁止になりましたが、
動画は再生が出来なくなりました。
※.htaccessを削除して制限を解除すると動画は正しく再生されます。
動画も画像も直リンクを正しく禁止するにはどうすればよろしいでしょうか。
教えてください。
何卒よろしくお願い申し上げます。

A 回答 (3件)

どのようなプログラミング言語が使えるのか環境が分からないので大雑把な説明になりますが、まずアクセスが有る度にユニークなIDを発行します。

(これが所謂ワンタイムトークン)
私は普段PHPを使ってますので
$Token = hash('sha256', uniqid($_SERVER['SERVER_ADDR'], TRUE));
と言った感じで作っちゃいます。

これをデータベース等に記録します。
この時、トークンと発行時刻を一緒に記録します。

次に、HTML上でURLを指定する際にトークンを付加しておきます。
<param name="url" value="contents/movie1.wmv?token=XXXXXXXXX">
といった感じになります。

そして、サーバに動画のリクエストが来た時にURLにくっついているトークンを取り出し、データベースから発行時刻を検索します。
発行時刻と現在時刻を比較し、一定時間以上(例えば5分とか)経過していたり、そもそもトークンがDBに登録されていなければ権限の無いアクセスと見なし 404エラー を返します。

こうすればアクセス制限が実現します。

この回答への補足

ご回答ありがとうございました。
開発はずばりPHPです。
アクセス制限のイメージはほぼ理解出来ましたが、
contents/movie1.wmv
という具合にHTMLに埋め込まれた場合、
ソースを表示とすればそのパスが推測されてしまいます。
PHPを通してアクセスしてくれればご教授いただいた対応でよいかと思いますが、
直リンクで
http://****/contents/movie1.wmv
とアクセスされてしまうとPHPでは対応できないのではないかと思います。
私の勘違いでしょうか。
画像のように.htaccessファイルで制限が掛けられるとよいのですが。
何卒よろしくお願い申し上げます。

補足日時:2011/08/30 23:23
    • good
    • 0

直リンクを確実に回避する方法は今のところ存在しません。

(Refererはブラウザに設定で送信しないようにも出来ますし、偽装も簡単にできるものです)
なので、直リンクかどうかを判定するためにトークンを発行してトークンがなければ直リンクと認識させます。

ワンタイム・トークンにはそれほど詳しくありませんが、この辺りが参考になるかなと。
http://www.ibm.com/developerworks/jp/opensource/ …
http://takagi-hiromitsu.jp/diary/20060409.html

実装方法としては一度だけ使用するセッションを確立するのが比較的簡単だと思います。
http://www.php.net/manual/ja/refs.basic.session. …
    • good
    • 0

画像はブラウザが直接読みに行くのでリファラーが付いてきますが、動画はメディアプレーヤー等が再生を行うため、メディアプレーヤー自身がサーバに対してファイルのリクエストを行うためリファラーは付いてこないため、再生出来なくなっているのだと思われます。



手っ取り早い対策としてはワンタイムトークンをファイル名に付加して、時間で制限を掛けるという方法がいいのではないでしょうか。

この回答への補足

早速のご回答ありがとうございます。
.htaccessファイルでは無理だったんですね。
了解いたしました。
”ワンタイムトークンをファイル名に付加する”という方法があるようですが、
具体的にはどうすればよいでしょうか。
ファイル名を変えてどのように再生するのですか?
何卒よろしくお願い申し上げます。

補足日時:2011/08/26 19:07
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報