5

次の構文を使用して曲にリンクする音楽プレーヤーがあります。

<li><a href="" data-src="http://s3.amazonaws.com/audiojs/02-juicy-r.mp3">title</a></li>

その実行されたサーバー側を使用して、ユーザーに(以下を参照)のように表示する方法はありますか?

検索中に、私はこれに出くわしました...私はデータを含む外部ファイルを持つことの背後にあるアイデアが好きです...次のように:

<?php
// get-file.php
// call with: http://yoururl.com/path/get-file.php?id=1
$id = (isset($_GET["id"])) ? strval($_GET["id"]) : "1";
// lookup
$url[1] = 'link.mp3';
$url[2] = 'link2.mp3';
header("Location: $url[$id]");
exit;
?>

次に、リンクとしてhttp://yoururl.com/path/get-file.php?id=1を使用します...唯一の問題は、http://yoururl.com/path/get-fileと入力した場合です。 php?id = 1ユーザーはファイルに直接アクセスします...その機能を無効にする方法はありますか...おそらくget-file.php自体のコードですか?

4

5 に答える 5

5

わかりましたので、私は満足できることを組み合わせました...完全に安全ではありませんが、それは間違いなくそれをかなり曖昧にするのに役立ちました.

まず、AudioJS プレーヤーを使用して音楽を再生しています。これはhttp://kolber.github.com/audiojs/にあります。

基本的に私がしたことは:

  1. 曲へのパスとして「data-src」を使用する代わりに、「キー」と呼びました。そうすれば、人々は必ずしもそれがパスだとは思わないでしょう。
  2. 曲の名前として「my-song-title」を使用する代わりに、7364920 のような番号に変更しました。これにより、人々はソースでその番号を探してその方法で URL を見つけることができなくなりました。
  3. すべての「キー」変数の後に + 「mp3」を JavaScript コードに追加しました。これにより、難読化されたリンクで宣言する必要がなくなります。
  4. 「your-domain.com/8273019283/」の代わりに「./8273019283/」のような相対パスを使用したため、URL を表示しているとわかりにくくなりました。
  5. href に iTunes リンクを追加しました。これにより、私がどのようにファイルをプルしたかについて、人々が混乱する可能性があります。

だから、今私のインラインjavascriptは次のようになります:

<script type="text/javascript">
        $(function() {
            // Play entire album
            var a = audiojs.createAll({
                trackEnded: function() {
                    var next = $("ul li.playing").next();
                    if (!next.length) next = $("ul li").first();
                    next.addClass("playing").siblings().removeClass("playing");
                    audio.load($("a", next).attr("key") + "mp3");
                    audio.play();
                }
            });
            // Load the first song
            var audio = a[0];
            first = $("ul a").attr("key") + "mp3";
            $("ul li").first().addClass("playing");
            audio.load(first);
            // Load when clicked
            $("ul li").click(function(e) {
                e.preventDefault();
                $(this).addClass("playing").siblings().removeClass("playing");
                audio.load($('a', this).attr('key') + "mp3");
                audio.play();
            });
        });
    </script>

私のリンクは次のようになります。

<a href="<?php $link = 'http://itunes.apple.com/us/album/falling/id504779876?i=504779883&uo=4'; $obfuscatedLink = ""; for ($i=0; $i<strlen($link); $i++){ $obfuscatedLink .= "&#" . ord($link[$i]) . ";"; } echo $obfuscatedLink; ?>" target="itunes_store" key="<?php $link = './8249795872/9273847591.'; $obfuscatedLink = ""; for ($i=0; $i<strlen($link); $i++){ $obfuscatedLink .= "&#" . ord($link[$i]) . ";"; } echo $obfuscatedLink; ?>">Falling</a>

ブラウザにロードしてソースを表示すると、次のように表示されます。

<a href="&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#105;&#116;&#117;&#110;&#101;&#115;&#46;&#97;&#112;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#47;&#117;&#115;&#47;&#97;&#108;&#98;&#117;&#109;&#47;&#102;&#97;&#108;&#108;&#105;&#110;&#103;&#47;&#105;&#100;&#53;&#48;&#52;&#55;&#55;&#57;&#56;&#55;&#54;&#63;&#105;&#61;&#53;&#48;&#52;&#55;&#55;&#57;&#56;&#56;&#51;&#38;&#117;&#111;&#61;&#52;" target="itunes_store" key="&#46;&#47;&#56;&#50;&#52;&#57;&#55;&#57;&#53;&#56;&#55;&#50;&#47;&#57;&#50;&#55;&#51;&#56;&#52;&#55;&#53;&#57;&#49;&#46;">Falling</a>

次に、Web Inspector または Firebug を使用すると、次のように表示されます。

<a href="http://itunes.apple.com/us/album/falling/id504779876?i=504779883&amp;uo=4" target="itunes_store" key="./8249795872/9273847591.">Falling</a> - *which doesn't completely give the url away

基本的に私がしたことは、リンクが何らかの API キーのように見えるようにすることでした。すばらしいことに、リンクをビュー ソースから直接コピーしたり、Web Inspector/Firebug から直接コピーしたりすることはできません。これは誰にでもできるものではなく、確実に壊れる可能性がありますが、ユーザーは自分が何をしているのかを知る必要があります。ほとんどの人を遠ざけますが、プレーヤーは曲を再生するために必要な URL を取得できます :)

* また、Stack Exchange のどこかから php 難読化スクリプトを取得しましたが、どこにあるのかわかりません。

于 2012-07-01T23:05:29.400 に答える
1

ヘッダーのリダイレクトを行う代わりに、適切なヘッダーを追加して、PHP コードに音声ファイルを含めます。次に、.htaccess ファイルで、オーディオ ファイルが存在するディレクトリへのアクセスを禁止できます。

于 2012-06-25T18:58:52.123 に答える
0

Amazon s3サービスを使用している場合は、ファイルに署名付きURLを使用できます。ユーザーに署名する必要があり、URLの有効期限が切れることもあるため、より安全になります。これを読んでください。

于 2012-06-25T19:02:50.827 に答える
0

いいえ。HTML を解釈してページを適切に機能させるのはブラウザであるため、これは不可能です。そのため、クライアント (ブラウザ) が mp3 の送信元を認識していない場合、mp3 を使用することはできません。

一方、リンクをクリックして音楽を切り替えたい場合は、http://jplayer.org/のようなツールを検討することをお勧めします。

編集:おそらくファイル自体への直接アクセスを防ぐ唯一の方法は、スクリプトからファイルにリンクするのではなく、ファイルを読み込むことです。たとえば、私のイメージ ホスティング サイトhttp://www.tinyuploads.com/images/CVN5Qm.jpgで、サーバー上の実際のファイル パスを見ると、ファイル CVN5Qm.jpg は public_html フォルダーからは見えません。 . ファイルに直接アクセスする方法はありません。データベースを使用して画像 ID を取得し、保存されている場所を検索してから、それをスクリプトに readfile() し、適切なヘッダーを表示して画像を出力します。

お役に立てれば

于 2012-06-25T18:47:18.977 に答える