2009-07-20 5 views
1

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

download.php?file=file_refrence_here

Как я могу предотвратить кто-то из положить ссылку на своем сайте, таких как:

http://www.mysite.com/download.php?the_file_refrence

Видимо $_SERVER[HTTP_REFER] не является надежным.

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

+3

Почему вы все равно хотите предотвратить привязку? – Bryan

ответ

7

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

Например

$file="foo.mp3"; 
$salt="youpeskykids"; 
$expiry=time()+3600; 
$hash=md5($salt.$file.$expiry); 

$url="download.php?file=$file&e=$expiry&h=$hash"; 

Теперь, когда вы обрабатываете такой запрос, вы можете пересчитать хэш и проверить, что представленная хэш равно: это гарантирует, что тот, кто сделал URL знает соль, которое, будем надеяться это только ваш сайт. Если хеш действителен, вы можете доверять времени истечения срока действия, и если он не истек, разрешите загрузку.

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

4

Вы не можете помешать кому-либо ссылаться на вашу страницу, так как вы не можете помешать кому-либо написать слово подсолнечник на листе бумаги.

Но если вы хотите предотвратить, что после такой ссылки произойдет загрузка этого ресурса, вам необходимо будет аутентифицировать запрос каким-либо образом. Это можно сделать, создав случайные, временные действительные токены аутентификации, которые может создать только ваша страница.

2

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

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

+0

Я могу включить ссылку на файл в этом тоже не могу? Так что я только что закончил с чем-то вроде download.php? Hash_here, так что если у файла has + ip не совпадает с ошибкой? – ian

+0

Да, вы могли бы это сделать. – chaos

Смежные вопросы