1

私のサイト (https://example.com) には、last.fm API を解析し、akamai CDN から画像を取得してページに表示するページがあります。

問題は、すべての画像が HTTP のみで提供されることです。https はサポートされていません。

例: http://userserve-ak.last.fm/serve/64s/76030502.png

私はphpで書かれた画像プロキシを持っています:

<?php
header('Content-Type: image/png');
if(isset($_GET['img'])){echo file_get_contents($_GET['img']);}
?>

これは完全に機能しますが、まったく安全ではありません。サーバーのみがイメージ プロキシを使用できるようにしたいので、URL のハッシュが最適なオプションでしょうか?

https://example.com/proxy.php?url=http://last.fm/image.jpg&hash=hashhere

私は使用することを考えていました:

md5($_GET['img']."privatekeyhere");

次に、私の問題は、全世界がアクセスできないように、秘密鍵をJavaScriptコードに入れる方法ですか?

どんな助けでも大歓迎です。


それ以来、ある程度効果的ですが、回避される可能性がある次のスクリプトを作成しました。

<?php
$args = $_GET['q'];
$date = date('m-d-Y-h-i', time());

list($hash,$img,$auth) = explode("/", $args);

if($hash=="need" && $auth=="key"){
    $checksum = md5($img.$date);
    echo $checksum;
}

if($hash==md5($img.$date))
{
    header('Content-Type: image/png');
    echo file_get_contents('http://userserve-ak.last.fm/serve/64s/' . $img);
}
?>

これは次のように呼び出すことができます:https://www.mylesgray.com/lastfm/need/76030502.png/key

次に、認証コードをプラグインして画像を表示できます。https://www.mylesgray.com/lastfm/{code-here}/76030502.png

しかし、毎分キーをポーリングするスクリプトを設定できることを誰かが理解するのにそれほど時間はかかりません - 何かアドバイスはありますか?

4

1 に答える 1

2

一意のトークンを生成します。ハッシュで正しい軌道に乗っていますが、秘密鍵を一定に保つと、最終的に総当たりになります. そこから、虹のテーブルが挨拶します。

CSRF の悪用を防ぐために使用されるメカニズムから葉を 1 つまたは 2 つ借りる必要があります。これは、同じことを効果的に行おうとしているためです。トークンごとに 1 つのクエリにユーザーを制限し、彼ら。

これを行う方法はたくさんありますが、通常のトレードオフは効率とセキュリティの間です。最も単純なのはあなたが提案したものです - これは簡単にブルートフォース可能です. 対極にあるのが DB アプローチです。訪問ごとに一意のトークンを生成し、それを DB に保存し、それに対して後続の呼び出しを検証します。これはかなり DB を集中的に使用しますが、比較的うまく機能します。トークン生成が弱い場合を除き、実質的に破ることは不可能です。

于 2012-11-18T13:43:38.293 に答える