<< mb関数の使い方 質問一覧 携帯サイトの文字コード設定について >>
  • キーワードが設定されていません

  • 0P
ダウンロードツール対策

Linuxを使い知り合いとかが作った音楽や動画を配布するサイトを運営する準備をしています。

WebをみるとDoSアタック対策、ダウンロードツール対策(PHP/CGI経由でのダウンロード)をするほうがいいとの書き込みを見つけました。
DoSアタック対策はApacheのモジュールで対応したのですが、ダウンロードツール対策としてのPHP/CGI経由でのダウンロードってのがいまいちわかりません。

参考になるHPやコードを公開している場所があれば教えていただけませんでしょうか。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。

Qダウンロードツール対策 ibms30  [04月02日 13時41分] 
┣(削除済み)
┃┗(削除済み)
┣Re:ダウンロードツール対策 mgngmgng  [04月02日 16時50分] 
┗Re:ダウンロードツール対策 NurseAngel  [04月02日 16時57分] 
  ┗Re:Re:ダウンロードツール対策 wintermute  [04月02日 17時16分] 
    ┗Re:Re:Re:ダウンロードツール対策 NurseAngel  [04月03日 01時58分] 
      ┗Re:Re:Re:Re:ダウンロードツール対策 wintermute  [04月03日 16時15分] 
        ┗(削除済み)
          ┗(削除済み)

コメント一覧

並び替え( ツリー順 / 投稿順[降順] / 投稿順[昇順]

(削除済み)

この意見は投稿者によって削除されました。

(削除済み)

この意見は投稿者によって削除されました。

Re:ダウンロードツール対策

PHP経由でファイルをダウンロードさせるスクリプトは
以下が参考になります。
http://d.hatena.ne.jp/cocoiti/20080221#1203611811
http://jp2.php.net/readfile#function.readfile.examples


ダウンロードツール対策ですが、
Cookie使ったセッション管理が妥当でしょうか。
# Cookie設定できるダウンロードツールだと
# まったく意味ないですが...

Web上にソースがみあたらなかったので
とりあえず簡単な流れだけ。


任意のページでアクセス元の固有情報を取得して
(IPアドレスとかユーザエージェントとかその辺の複合情報)
セッションに保存

ダウンロードスクリプトにリクエストが来たら
アクセス元の固有情報をもう一回取得して
セッション値と一致するかチェック

一致すればダウンロード、
一致しなかったら404ヘッダを吐くなど

Re:ダウンロードツール対策

特に参考サイト等が見つからなかったので以下は妄想です。

・まずダウンロードさせるファイルは公開ディレクトリに置かない。もしくは.htaccess等で接続制限
 (公開ディレクトリに置いている=公開している、です)

・ダウンロード直前のページでワンタイムトークンを発行、フォームに仕込む
・ダウンロードリンクは直接コンテンツではなくダウンロード用スクリプトに張る
・ダウンロード用スクリプトはワンタイムトークンをチェックしてOKだったらダウンロードさせる


index.php
  1. <?php
  2.   //ワンタイムトークン発行
  3.   $token=rand();
  4.   //$tokenをどっかに保存
  5.   file_put_contents('token.txt',$token,FILE_APPEND);
  6.  
  7.   print('
  8.     <form method="POST" target="download.php">
  9.       <input type="hidden" name="id" value="'.htmlspecialchars($id).'">
  10.       <input type="hidden" name="token" value="'.htmlspecialchars($token).'">
  11.       <input type="submit" name="submit" value="ダウンロードする">
  12.     </form>
  13.   ');


download.php
  1. <?php
  2.   //リクエストにワンタイムトークンが入ってなければ死
  3.   if(!in_array($_REQUEST['token'],file('token.txt')){
  4.     die();
  5.   }
  6.   //その他認証
  7.   //
  8.   
  9.   //$_REQUEST['id']とかから該当のコンテンツを引っ張ってくる
  10.   header("MP3のヘッダとか");
  11.   readfile("MP3のファイル")

まあ、よくあるアップローダみたいな作りです。
上記は今適当に書いたのでワンタイムトークンの作り方が好い加減すぎたりtoken.txtが際限なく増えたり有効期限が無期限だったりそもそもtoken.txtが外から丸見えだったりしますがそこらへんはどうにかしてください。
どうせコンテンツを引っ張ってくるのにDBを使うことになると思いますのでDBに入れるとよいでしょう。

あとは、その他認証部分に

・ひとつのIPアドレスから同時に複数要求とかが来てたら死
・リファラが正しく入ってるかチェック
・一回ダウンロードしたらそのtokenは無効化
・レジューム要求とかが来たら200なり416なりを返す
・トークンを発行するついでにCookieも出してみる

あたりを好みで追加したりするといいかもしれません。

もっと強固にしたいなら、CAPTCHAでも付ければそこらのダウンロードツールでは太刀打ちできないでしょう。


#ここまで書いて、トークンはあんまり意味ねえなということに気がついた。
#JavaScript使ってトークンをDOMで追加とかはどうだろう。

Re:Re:ダウンロードツール対策

  1. //リクエストにワンタイムトークンが入ってなければ死 
  2.   if(!in_array($_REQUEST['token'],file('token.txt')){ 
  3.     die(); 
  4.   }
具体的なコードまで書いておきながらいい加減すぎませんか?
(ファイルのロックもしてないし、古いトークン情報が残ったままだし。)

念の為書いておきますが「これは実用に耐えないコード」です。

# まぁ、セッション使えばいいだけかと

Re:Re:Re:ダウンロードツール対策

だからいい加減だって言ってるのに。
駄目な理由もすぐ下に書いてますし、5分かそこらで書いたコードに実用性を求められましても。
ただLOCK_EXは忘れてました。失礼。

てか、ファイルに保存とかログ以外使わない…


#確かに、セッションに突っ込んだ方がよほど手っ取り早かったですね

Re:Re:Re:Re:ダウンロードツール対策

>5分かそこらで書いたコードに実用性を求められましても。
「5分かそこらで書いた」などという事は、書かれている事からうかがい知る事はできませんよね?

# ちょっと、言い訳もいい加減すぎませんか?

(削除済み)

この意見は投稿者によって削除されました。

(削除済み)

この意見は投稿者によって削除されました。
mb関数の使い方 質問一覧 携帯サイトの文字コード設定について