2012-06-25 47 views
4

我有一個音樂播放器,使用下面的語法鏈接到一首歌:隱藏MP3完整URL

<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本身的一些代碼?

+1

設置動態地從大量模糊JavaScript源...這是你可以做我認爲最好的procedence。如果有人知道他們在做什麼,他們總是可以下載它。 – Esailija

+0

.htaccess文件可以幫助:) – alibenmessaoud

+0

也嘗試nonce :) – alibenmessaoud

回答

5

好吧,我做了一些我滿意的事情......雖然不是完全安全,但它確實幫助我隱瞞了它。

首先,我現在用的是AudioJS播放器播放音樂 - 這可以發現:http://kolber.github.com/audiojs/

基本上我所做的是:

  1. 而不是使用「數據-SRC」爲我把它叫做「鑰匙」,這樣人們不一定會認爲這是一條路。
  2. 我不是使用「my-song-title」作爲歌曲的名稱,而是將它改爲7364920這樣的數字,這樣人們就無法在源代碼中查找它並以這種方式找到url。
  3. 我在所有「關鍵」變量之後向javascript代碼添加了「mp3」,這樣我就不必在obfusticated鏈接中聲明它了。
  4. 我使用了「./8273019283/」而不是「your-domain.com/8273019283/」這樣的相對路徑,這樣就很難說我正在顯示一個url。
  5. 增加了一個iTunes鏈接到href,這樣人們可能會對我是如何拉文件感到困惑。

所以,現在的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複製鏈接。這不是簡單的,絕對可以被打破,但用戶必須知道他們在做什麼。它使大多數人遠離,但仍然允許玩家獲得它需要播放歌曲的網址:)

*另外,我從棧交換的某處得到了PHP obfusticate腳本,只是不知道在哪裏。

感謝您的幫助!我希望這可以幫助別人試圖做同樣的事情!

喬希

0

不,這是不可能的,因爲它是瀏覽器解釋HTML以使頁面正常工作。所以如果客戶端(瀏覽器)不知道mp3來自哪裏,那麼它就不會在那裏使用。

在另一方面,如果你想通過點擊一個鏈接,那麼我建議你看看一些工具,如http://jplayer.org/

EDIT有音樂切換歌曲:以可能防止文件本身會直接訪問的唯一方法是讀取文件,而不是從腳本鏈接到它。例如,在我的圖像託管站點http://www.tinyuploads.com/images/CVN5Qm.jpg上,如果您要查看服務器上的實際文件路徑,文件CVN5Qm.jpg不在public_html文件夾中。沒有辦法直接訪問該文件。我使用數據庫來獲取圖像ID,查找它的存儲位置,然後將它讀取到腳本中並顯示適當的標題以輸出圖像。

希望這有助於

+0

請看我的編輯...我找到了一些可行的工作...只需要一點點調整:) –

+0

我對我的文章做了一些修改。 – MasterGberry

+0

我試圖實現你的解決方案,但我無法弄清楚如何做到這一點...請參閱我的解決方案:) –

1

而不是做一個頭重定向,加適量頭,包括在你的PHP代碼的音頻文件。然後,在.htaccess文件中,您可以禁止訪問音頻文件所在的目錄。

+0

你是什麼意思適當的標題? –

+0

查看[this SO question](http://stackoverflow.com/questions/5275126/output-mp3-with-php),瞭解如何輸出MP3標頭以便從PHP提供MP3文件。 – Quantastical

+0

對不起,我不確定如何使用您的建議更改文件,請看下面我最終想出的內容:) –

0

如果您使用的是亞馬遜s3服務,則可以使用簽名的url作爲文件。這將是更安全的,因爲你必須簽名的用戶,也可以過期的URL。閱讀this

+0

不,我沒有使用S3服務,文件url只是隨附的示例音頻播放器:)不錯的主意! –

0

我用HTTP_REFERER,我可以CONTROLL鏈接

<?php 
// key.php 
// call with: http://yoururl.com/path/key.php?id=1 
$page_refer=$_SERVER['HTTP_REFERER']; 


if ($page_refer=="http://www.yourdomine.com/path/page.html") 
    { 
    $id = (isset($_GET["id"])) ? strval($_GET["id"]) : "1"; 
    // lookup 
    $url[1] = 'link1.mp3'; 
    $url[2] = 'link2.mp3'; 
    header("Location: $url[$id]"); 
    exit; 
    } 
else 
    { 
    exit; 
    } 
?>