Скрыть полный URL-адрес 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 пользователь переходит прямо к file...is есть какой-нибудь способ отключить эту способность... может быть, какой-нибудь код на get-file.php сам по себе?
5 answers
Хорошо, итак, я сделал комбинацию вещей, которыми я доволен... хотя и не совсем безопасно, это определенно помогло мне немного скрыть это.
Прежде всего, я использую проигрыватель AudioJS для воспроизведения музыки, который можно найти: http://kolber.github.com/audiojs/
В основном то, что я сделал, было:
- Вместо того, чтобы использовать "data-src" в качестве пути к моим песням, я назвал его "ключом", чтобы люди не обязательно думали, что это путь.
- Вместо используя "название моей песни" в качестве названия песен, я изменил его на номер, например 7364920, чтобы люди не могли искать его в источнике и таким образом находить URL-адрес.
- Я добавил +"mp3" в код javascript после всех "ключевых" переменных, таким образом, мне не пришлось бы объявлять его в запутанной ссылке.
- Я использовал относительный путь, такой как "./8273019283/" вместо "your-domain.com/8273019283 /", таким образом, было бы сложнее определить, что я отображал URL-адрес.
- Добавлен Ссылка 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="http://itunes.apple.com/us/album/falling/id504779876?i=504779883&uo=4" target="itunes_store" key="./8249795872/9273847591.">Falling</a>
Затем, когда вы используете веб-инспектор или Firebug, вы увидите:
<a href="http://itunes.apple.com/us/album/falling/id504779876?i=504779883&uo=4" target="itunes_store" key="./8249795872/9273847591.">Falling</a> - *which doesn't completely give the url away
В основном я сделал так, чтобы ссылка выглядела так, как будто это какой-то api-ключ. Самое классное, что вы не можете просто скопировать ссылка прямо из источника просмотра или прямо из веб-инспектора/Firebug. Он не является надежным и определенно может быть взломан, но пользователь должен знать, что он делает. Это удерживает большинство людей на расстоянии, но все же позволяет проигрывателю получить URL-адрес, необходимый для воспроизведения песни:)
*кроме того, я получил php-скрипт запутывания откуда-то на Stack Exchange, просто не уверен, где.
Спасибо за всю помощь! Я надеюсь, что это поможет кому-то другому, пытающемуся сделать то же самое!
Джош
Вместо перенаправления заголовка добавьте правильные заголовки и включите аудиофайл в свой PHP-код. Затем в файле .htaccess вы можете запретить доступ к каталогу, в котором находятся ваши аудиофайлы.
Если вы используете сервис amazon s3, вы можете использовать подписанный URL-адрес для своих файлов. Это будет более безопасно, так как вы должны быть подписанным пользователем, а также срок действия URL-адреса может истечь. Прочитайте это.
Нет. Это невозможно, так как именно браузер интерпретирует HTML-код для правильной работы страницы. Поэтому, если клиент (браузер) не знает, откуда берется mp3, то его там не будет для использования.
С другой стороны, если вы хотите, чтобы музыка переключала песни, нажав на ссылку, я предлагаю вам изучить некоторые инструменты, такие как http://jplayer.org/
РЕДАКТИРОВАТЬ: Единственный способ, вероятно, предотвратить прямой доступ к самому файлу, - это прочитать файл вместо ссылки на него из скрипта. Например, на моем сайте размещения изображений http://www.tinyuploads.com/images/CVN5Qm.jpg и если бы вы посмотрели на фактический путь к файлу на моем сервере, файл 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;
}
?>