Как скрыть реальные ссылки?

У меня есть сайт, основанный на скачке файлов за деньги.
Но если человек узнал ссылку на платный файл, он может ее распространять.
Я спросил у поддержки, они ответили так

Здравствуйте.
Вы можете сменить каталог хранения файлов и скрыть реальные пути используя mod_rewrite для преобразования ссылок. Это даст возможность выполнять обращение по реальным адресам, не видимым никому. Вариантом может быть также написание программистами (либо использование уже готового решения для вашей CMS) дополнительного модуля для защиты.


Я сам в этом не разбираюсь, может ли кто-нибудь разложить все по полочкам?
  • Вопрос задан
  • 5600 просмотров
Решения вопроса 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Вариантов это сделать - 2.

1) Если у Вас файлы маленькие - можно просто читать их из php скрипта и отдавать.
Перед этим можно проверять имеет ли право текущий пользователь скачивать этот файл.
Что то вроде
$content = file_get_contents('/path/to/file/in/private/dir/filename');

	header('Content-Description: File Transfer');
	header('Content-Type: application/octet-stream');
	header('Content-Disposition: attachment; filename="'.$file_info->title.'"');
	header('Content-Transfer-Encoding: binary');
	header('Expires: 0');
	header('Cache-Control: must-revalidate');
	header('Pragma: public');
	header('Content-Length: ' . strlen($content));
	echo ($content);

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

2) Использовать nginx и директиву X-Accel-Redirect.
В конфиге nginx
location /protected/ {
	root /www/mysite.com/;
	rewrite ^/protected/(.*)$ /$1 break;
	internal;
  }

В php коде соответственно
header('Content-Description: File Transfer');
	header('Content-Type: application/octet-stream');
	header('Content-Disposition: attachment; filename="'.$file_info->title.'"');
	header('Content-Transfer-Encoding: binary');
	header('Expires: 0');
	header('Cache-Control: must-revalidate');
	header('Pragma: public');
	
	header('X-Accel-Redirect: /protected'. $file_info->file);


Решение отличное, быстрое.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Keksinautin
@Keksinautin
Software Engineer
Вообще, такую задачу должны решать программисты. Можно ограничить время использование ссылки и скрыть реальный адрес до файла (Secure Link). Можно так же ограничить доступ к файлу, использую cookies. Можно подсчитывать кол-во обращений к файлу и через 3-5 обращений закрывать доступ (не 1 потому что у пользователя может обрываться соединение).
Однако, на этот вопрос нельзя ответить без контекста. Так что вопрос, скорей всего должен превратиться в тех.задание.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Сделайте авторизацию для Ваших клиентов и далее проверяйте является ли он пользователем.
Какая у Вас CMS?
Ответ написан
Комментировать
@blogor
Все гораздо проще. Делаете магазин файлов на готовой CMS. В данном случае подойдет Moguta CMS в бесплатной ипостаси. А после подключаете возможность покупки по кодовому слову. Торгуете собственно именно этими кодовыми словами.
Торговать ссылками...а кто помешает скаченное разместить на яндексдиске/ином ресурсе?
А после этого можно сколько угодно распространять ссыль. Даже с торрентом не придется заморачиваться.

Лучший вариант - это шифровка самого файла, а доступ по паролю, который будет автоматом высылаться на почту, которую введет покупатель. Хотя это другая проблема и другой вопрос :)

А вообще, писать такой вопрос не указав нормального ТЗ и не указав предпочитаемую CMS бесмыссленно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы