php скрытая ссылка для скачивания - PullRequest
0 голосов
/ 06 апреля 2011

Я собираюсь создать простой микросайт PHP, который позволит загружать треки одной из моих групп в обмен на адрес электронной почты.Я знаю, что могу использовать Bandcamp, но я хочу сделать это сам;)

Я нашел микросайт из группы, которая мне нравится, которая делает именно то, что я хочу, поэтому я попытался разбить ее на части.Этот сайт http://threetrappedtigers.heroku.com. Этот сайт в основном заставляет вас ввести свой адрес электронной почты, который он затем должен поместить в базу данных (если не найдет совпадение для этого адреса электронной почты в БД).

Вы можетезатем просмотрите кнопку загрузки и загрузите файл, не раскрывая его URL-адреса.href для этой кнопки - "download/", что заставляет меня предположить, что в каталоге загрузки есть index.php, для которого должен быть установлен некоторый идентификатор сеанса (предположительно, настроенный при отправке электронной почты), чтобы люди не могли напрямую ссылаться на него.Это.Однако файл также выполняет некоторую работу, о которой я не знаю, чтобы скрыть ссылку.

Другой аспект, который я не понимаю, заключается в том, что на странице, где вводится электронное письмо, есть скрытый вводкоторый отправляет случайный authenticity_token при отправке адреса электронной почты.Я тоже не могу понять, почему это необходимо.

Извиняюсь за этот ужасно специфический вопрос, но я пытался решить его все утро и не могу полностью разобраться.

Спасибо,

Рич

Ответы [ 2 ]

1 голос
/ 06 апреля 2011

Что вы можете сделать, это:

  1. Пользователь вводит адрес электронной почты
  2. Подтвердите (или нет, зависит от ваших пожеланий), отправив электронное письмо со ссылкой, содержащей токен. т.е.: http://myawesomband.com/downloadtrack.php?token=asd#%$dhj123
  3. downloadtrack.php проверяет токен и загружает образец дорожки с file_get_contents() и предлагает его для загрузки (см. Конкретные заголовки на сайте php.net)

Преимущество заключается в том, что пользователь не знает, где находится файл (лучше всего, если вы поместите образец дорожки за пределы руткита.

[EDIT] Для вашего скрытого токена поля ввода: Это может быть использовано для того, чтобы сбить с толку ботов и другие скрипты, которые будут публиковать поле «email» только в больших количествах. Если токен не отправлен и не соответствует значению $_SESSION['token'], запрос не обрабатывается. Это работает, потому что сценарии, которые выполняют подобные атаки, обычно не принимают куки, поэтому их массив $_SESSION никогда не перезагружается.

1 голос
/ 06 апреля 2011

вы можете посмотреть на это, как оно делает то, что вы хотите, либо использовать торт или принять некоторые идеи

http://book.cakephp.org/view/1094/Media-Views

https://github.com/cakephp/cakephp/blob/master/cake/libs/view/media.php

вы можетесм. в функции render (), в основном это установка правильного заголовка

...