Блокировать реферер

Тема в разделе "PHP", создана пользователем ingmar, 11 окт 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. ingmar

    ingmar Создатель

    Регистр.:
    6 мар 2009
    Сообщения:
    14
    Симпатии:
    0
    Наверное многие знают сервис http://ex.ua, там реализована защита ссылок антилич, основанная на проверке реферера, т.е если вы вставите ссылку на файл http://www.ex.ua/load/4323449 в адресную строку браузера, то сможете скачать файл, но если перейдете по этой ссылке с другого сайта, то он переадресует на страницу с описанием. Почти все браузеры поддерживают отключение передачи реферера. Но есть ли способ заблокировать реферер на стороне сервера с помощью php? Если кто знает решение, помогите разобраться.

    Конструкция через редирект не помогает:
    Код:
    <?php
    header('Location: http://www.ex.ua/load/'.$_GET['id']);
    ?>
    Через cUrl тоже не получается, т.к он грузит саму страницу.
     
  2. t3s

    t3s

    Регистр.:
    16 фев 2008
    Сообщения:
    719
    Симпатии:
    290
    узнать реферер на стороне сервера можно с помощью getenv('HTTP_REFERER'), далее сравниваете его с урлом сайта и либо отдаете файл либо нет...


    но єто не панацея, поскольку реферер подделывается... на файлообменниках делают немного иначе - там для каждого посетителя генерируется "личная" ссылка, которая работает только с определенного компа и только определенное время
     
  3. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    884
    Симпатии:
    540
    Через js можно такое сделать-

    <script>
    //############################3
    // Открытие ссылки без реферера
    function openEx(url)
    {
    w = window.open();
    w.document.write('<meta http-equiv="refresh" content="0;url='+url+'">');
    w.document.close();
    return false;
    }

    </script>

    <span onclick="return openEx('http://www.ex.ua/load/..);" style="text-decoration: underline; cursor: pointer;" title="Безопасная ссылка, Referer не передается"> текст </span>
    (c) antichat
     
    Haliff3007 нравится это.
  4. propovednik

    propovednik Постоялец

    Регистр.:
    16 май 2008
    Сообщения:
    104
    Симпатии:
    21
    Вы идете в правильном направлении, я у себя делаю так: кроме проверки реферера, проверяю куку, которая создается при первом открытии любой страницы сайта и генерируется на основе IP, текущего дня и по желанию - других данных. Поэтому подделка реферера не поможет - механизм генерации куки-то неизвестен.
     
  5. funman

    funman

    Регистр.:
    28 дек 2007
    Сообщения:
    157
    Симпатии:
    25
    getenv("HTTP_REFERER"); - как с помощью этой ф-ции получить рефер где в адресе есть #

    К примеру если адрес Перейти по ссылке

    так вот HTTP_REFERER , вернет только Перейти по ссылке, а из строки нужно поймать id.

    Какие есть альтернативные способы решения данной проблемы???
     
  6. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    никакие

    то что после # - это ссыцлка внутри документа Перейти по ссылке

    т.е. фактически ты переходишь именно с Перейти по ссылке что и передается в реферере -- ты еще попытайся отследить сколько скролов сделал человек

    разве что писать из js в куки например, но это только в приделах твоего сайта и будет боольшим извращением
     
  7. funman

    funman

    Регистр.:
    28 дек 2007
    Сообщения:
    157
    Симпатии:
    25

    Сколько скролов сделали мне точно не нужно, а вот поймать ссылку с # нужно.

    Конкретный пример Перейти по ссылке

    Так вот когда пользователь из своего ящика кликает, мне нужен ID моего письма... раньше было просто, а щас они извратились как внутренняя ссылка, и что делать я не знаю
     
  8. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    в твоем случае - ничего не сделаешь

    js вставлять нельзя, хз можно ли flash и имеет ли доступ flash к этим данным ( сомневаюсь )
     
Статус темы:
Закрыта.