Скрыть полный MP3-файл

У меня есть музыкальный плеер, который ссылается на песню, используя следующий синтаксис:

<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 сам?

Хорошо, поэтому я сделал комбинацию вещей, которым я доволен … хотя и не полностью безопасным, это определенно помогло мне немного скрыть его.

Прежде всего, я использую плеер AudioJS для воспроизведения музыки, который можно найти: http://kolber.github.com/audiojs/

В основном, что я сделал:

  1. Вместо того, чтобы использовать «data-src» в качестве пути к моим песням, я назвал его «ключом», поэтому люди не обязательно думали бы, что это путь.
  2. Вместо того, чтобы использовать название «my-song-title» в качестве названия песен, я изменил его на число, подобное 7364920, таким образом, люди не могли найти это в источнике и найти URL-адрес таким образом.
  3. Я добавил + "mp3" в javascript-код после всех «ключевых» переменных, поэтому мне не пришлось бы объявлять его в обходной ссылке.
  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> и <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> и <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-адрес, необходимый для воспроизведения песни 🙂

* Кроме того, я получил php obfusticate script откуда-то на Stack Exchange, просто не знаю, где.

Спасибо за помощь! Надеюсь, это поможет кому-то еще попытаться сделать то же самое!

мистифицировать

Вместо того, чтобы делать перенаправление заголовка, добавляйте соответствующие заголовки и включайте аудиофайл в свой PHP-код. Затем в вашем файле .htaccess вы можете запретить доступ к каталогу, в котором живут ваши аудиофайлы.

Если вы используете службу amazon s3, вы можете использовать подписанный URL для своих файлов. Он будет более безопасным, поскольку вы должны быть подписаны пользователем, а также срок действия url может быть истек. Прочтите это .

Нет. Это невозможно, поскольку браузер интерпретирует HTML, чтобы страница работала правильно. Поэтому, если клиент (браузер) не знает, откуда будет поступать mp3, он не будет использоваться.

С другой стороны, если вы хотите, чтобы музыка переключилась на песни, нажав ссылку, я предлагаю вам изучить некоторые инструменты, такие как http://jplayer.org/

EDIT: Единственный способ предотвратить прямой доступ к самому файлу – это прочитать файл вместо ссылки на него из скрипта. Например, на моем сайте хостинга изображений http://img.ruphp.com/php/logo_huge_domains.gif, и если вы хотите посмотреть фактический путь к файлу на моем сервере, файл CVN5Qm.jpg не доступен из папки public_html , Нет прямого доступа к файлу. Я использую базы данных, чтобы взять идентификатор изображения, посмотреть, где он хранится, а затем прочитать файл () в скрипт и отобразить соответствующие заголовки для вывода изображения.

Надеюсь это поможет

Я использую 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; } ?>