- 2007-05-31
- php
Refererを使わずに直リンクを防止する方法を考えてみます。
元ネタ: cl.pocari.org - PHP の apache_setenv と virtual を利用して,ファイルへの直リンクを防止する
この foo.php のファイル名を時間によって変えるなどすれば,まあ,直リンクを防止することができる……のかな?ちと強引ですが.
つまり、「直リンクを防止する」ことを考えるより「ある一定時間しか有効でないURLを作る」ことを考えれば良いということじゃないでしょうか。
で、foo.phpのファイル名を変えちゃうと、外部からの直リンクは防げても、内部からの普通のリンクを貼る時に困りそうです(それならぶっちゃけ、画像のファイル名そのものを時間によって変えちゃってもいいわけだし)。
なので、時刻をパラメータとして渡す方針で。
フェーズ1
foo.php?t=....のようにfoo.phpにタイムスタンプを渡す- foo.phpの中で
$_GET['t']と現在時刻を比較し、n分以上たっていればはじく - でもこれじゃ簡単に偽装されちゃうYO!
なので、フェーズ2
- foo.phpにタイムスタンプと、(タイムスタンプ+秘密鍵)のHMACを渡す。
- foo.phpの中で、(タイムスタンプ+秘密鍵)のHMACを再計算して、渡ってきたHMACと一致するかチェック。
- foo.phpの中で
$_GET['t']と現在時刻を比較し、n分以上たっていればはじく
な感じじゃないでしょうか。本当はapache moduleとかで書いた方が楽そうですが。