隐藏MP3完整网址

时间:2012-06-25 18:45:03

标签: php hide mp3 audio-player

我有一个使用以下语法链接到歌曲的音乐播放器:

<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时,用户直接进入该文件...是否有任何方法可以禁用该功能.. .maybe get-file.php本身的一些代码?

5 个答案:

答案 0 :(得分:5)

好的,所以我做了一些我很满意的事情......虽然不是很安全,但它确实让我模糊了不少。

首先,我使用AudioJS播放器播放音乐 - 可以找到:http://kolber.github.com/audiojs/

基本上我做的是:

  1. 我没有使用“data-src”作为歌曲的路径,而是将其称为“关键”,这样人们就不会认为这是一条道路。
  2. 我没有使用“my-song-title”作为歌曲的名称,而是将其更改为7364920这样的数字,这样人们就无法在源代码中找到它,并以这种方式找到网址。
  3. 我在所有“关键”变量之后向javascript代码添加了+“mp3”,这样我就不必在obfusticated链接中声明它。
  4. 我使用了像“./8273019283/”而不是“your-domain.com/8273019283/”这样的相对路径,这样就很难说我正在显示网址。
  5. 在href中添加了一个iTunes链接,这样人们可能会对我如何提取文件感到困惑。
  6. 所以,现在我的内联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-key。很酷的是,您不能直接从视图源复制链接,也不能直接从Web Inspector / Firebug复制链接。它不是万无一失的,绝对可以被打破,但用户必须知道他们在做什么。它让大多数人远离,但仍然允许玩家获得播放歌曲所需的网址:)

    *另外,我从Stack Exchange上的某处获得了php obfusticate脚本,只是不知道在哪里。

答案 1 :(得分:1)

不是进行标题重定向,而是添加适当的标题并在PHP代码中包含音频文件。然后,在.htaccess文件中,您可以禁止访问音频文件所在的目录。

答案 2 :(得分:0)

没有。这是不可能的,因为浏览器解释HTML以使页面正常工作。因此,如果客户端(浏览器)不知道mp3的来源,则无法使用。

另一方面,如果您想通过点击链接获得音乐切换歌曲,那么我建议您查看一些工具,例如http://jplayer.org/

编辑:可能阻止直接访问文件本身的唯一方法是读取文件,而不是从脚本链接到文件。例如,在我的图像托管网站http://www.tinyuploads.com/images/CVN5Qm.jpg上,如果您要查看我服务器上的实际文件路径,则文件CVN5Qm.jpg将不在public_html文件夹中。无法直接访问该文件。我使用数据库获取图像ID,查找存储位置,然后将readfile()写入脚本并显示正确的标题以输出图像。

希望这有帮助

答案 3 :(得分:0)

如果您使用的是amazon s3服务,则可以使用已签名的网址来存档。它将更安全,因为您必须是签名用户,并且URL也可以过期。阅读this

答案 4 :(得分:0)

我使用http_referer,我可以控制链接的优先级

<?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;
    }
?>