0

ゲーム自体をダウンロードする前にユーザーがログインする必要がある、開発中の Java ゲーム用のランチャーを作成したいと考えています。私の考えは、ランチャーに資格情報を Web サーバーに送信させることでした。資格情報が正しい場合、Web サーバーは一時ファイルの場所を出力します。ただし、次の場合、これは少しトリッキー/非効率的です。

  1. サーバーは誰かが更新するたびにゲームファイルをコピーする必要があり、
  2. Web サーバーは、ファイルのダウンロードがいつ完了したかを知りません。

おそらく、ランチャーは別のスクリプトに要求を送信して、指定された一時的な名前のファイルを削除できますか? これに関する問題は、ランチャーが簡単に逆コンパイルされ、要求を送信しないように変更され、新しいファイルを作成する目的が無効になる可能性があることです。

このアイデアとその問題について何か提案はありますか?

4

3 に答える 3

3

次のようなデータベースを使用します。

urlgenerator.php

 <?php

 // generate code
 $code = uniqid();

 // save code to database
 db_save($code);

 // write link
 echo '<a href="download.php?code=' . $code . '">Download</a>';

ダウンロード.php

<?php

// get code from url
$single_use_code = $_GET['code'];

// check if the code is in the db
if(db_get_code($single_use_code)) {
   // remove code from database as it is single use only
   db_remove($single_use_code);
   // start download
   start_download();
} else {
   // the code is not valid
   die('BAD code');
}
于 2013-04-21T18:07:58.207 に答える
1

次のようなことを試してください:

// Define a random key
$key = 'kgjiowtjiohgjiut09ig90im09yig90mi903i490ti209tgwgt';  
$secondsValid = 300;

if($_GET['action'] == 'download')
{
  $time = $_GET['time'];
  if(time() - $time > $secondsValid)
    die('Code has expired, please try again');
  if($_GET['validation'] != md5($time.$key))
    die('Invalid validation code');
  DownloadFile();
  die;
}
elseif(CredentialsAreCorrect())
{
  $time = time();
  header('Location: '.$_SERVER['REQUEST_URI'].'?action=download&time='.$time.'&validation='.md5($time.$key));
  die;
}
else
  die('Invalid credentials');

これは、キーが安全である限りハッキングできない基本的な機能を使用するだけで、厄介なコピー/シンボリックリンク/関連するものを一切使用せずに、検証済みのユーザーに時限爆弾の URL (この場合は 5 分間有効) を与える簡単な方法です。 . キーに十分なエントロピーがあることを確認してください(40回以上のランダムなキープレスが必要です)ので、レインボーテーブルやブルートフォース攻撃は実行できません.

于 2013-04-21T18:09:16.207 に答える