предотвращение внешних ссылок на страницу - PullRequest
1 голос
/ 20 июля 2009

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

download.php?file=file_refrence_here

Как я могу запретить кому-либо размещать на своем сайте ссылку, такую ​​как:

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

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

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

Ответы [ 3 ]

7 голосов
/ 20 июля 2009

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

Например

$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 голосов
/ 20 июля 2009

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

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

2 голосов
/ 20 июля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...