Как заставить браузер не слать REFERER?

DiMA

php.spb.ru
Команда форума
Как заставить браузер не слать REFERER?

Есть некий URL: "http://мой.сайт/test.php?variable=секрет".

Необходимо вставить картинку на эту страницу с URL "http://вражеский.сайт/картинка.jpg" но так, чтобы в логах апача (или замаскированного php скрипта с именем "картинка.jpg") не попал "секрет" из REFERER'a.

Пробовал делать скрипт redirect.php и фичи типа
<img src="redirect.php?url=http://вражеский.сайт/картинка.jpg"> или <iframe src=>, да редиректить разными путями:
1. Header("Location: ...")
2. Header("Refresh: 0; URL=...")
3. <script>location.href=....</script>
4. META refresh
но что-то никак не сбросить.

Единственный разумный вариант нашел - скачивать URL картинки на свой сервер и выдавать уже на него ссылку. Но это лишний трафик.

Загружать мою страницу методом POST нельзя.
 

fixxxer

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

Если кто знает лучшее решение - буду очень рад его услышать.
 

deek

Новичок
как раз недавно вставала такая же проблема, но для интранет системы, нашел вот что:
Q178066 INFO: Internet Explorer Does Not Send Referer Header in Unsecured Situations

перефразируя пример оттуда, IE не будет слать заголовок реферера, если будет происходить обращение:

javascript:somejavascriptcode --> http://example.microsoft.com
file://c:\alocalhtmlfile.htm --> http://example.microsoft.com
https://example.microsoft.com --> http://www.microsoft.com

меня тогда полностью устроил вариант с https. другие даже не тестил. тем более, не уверен, делают ли тоже самое остальные браузеры.
 

Pietrovich

Guest
конкретно для загрузки JPG врядли подойдет,
но flash-player до сих пор не отправляет refferer ...
т.е. вызов get("http://some.url") заставляет считать броузер что some.url был набит руками пользователя в поле "адрес" и потому реф не отправляется :)

можешь конечно пользовать флешевый контейнер и loadMovie, но работать будет только начиная с 6й версии и только с non-progressive JPG

:)
 

Sirius

PHP+MySQL=LOVE
PHP:
<?=getenv('HTTP_REFERER')?>
<a href="<?=getenv("PATH_INFO")?>"><?=getenv("PATH_INFO")?></a>
<?=sleep("1");?>
<script language="JavaScript">
<!--
window.location.replace('<?=getenv("PATH_INFO")?>');
// -->
</script>
Попробуй... Я точно не уверен, но Хистори в браузере он не оставляет, значит и рефера не должен показывать!
 

Crazy

Developer
Логической связи между хистори и реферером нет, но в IE6 этот код действительно не передает HTTP_REFERER.
 

xntx

Guest
если траффика у нас много, и машина особо не занята, то можно сделать так:
PHP:
<?
$url = "http://www.phpclub.net/talk/images/icons/icon9.gif";
$fopen = fopen($url, "r");
header("Content-type:image/".substr($url, -3));
print fread($fopen, 1000000);
?>
а если жалко трафф или проц, то можно этот файл на каком-нибудь фрихосте выложить :)
 

xntx

Guest
ЗЫ: а то что вы предлагаете, оно ведь работает только под IE, тоесть Opera и Mozilla в пролете, так? :D
 

Линк

Guest
А почему бы не попробовать через javascript?

Он не шлет referrer на сколько мне известно

<IMG SRC="" ID="p">

<SCRIPT>
a=new Image();
a.src="http://pics.ru/pic.gif";
document.all['p'].src=a.src;
</SCRIPT>
 

VaDima

Guest
Алаверды:
как ЗАСТАВИТЬ браузер ВСЕГДА передавать referrer в ситуации:
http://root/path.htm -> http://root/img.gif
?

Задача т.о. следующая: "отдавать" img.gif, только если referrer >= http://root/

В клинике описаны случаи, когда, в частности, IE не передает referrer, хотя на другой машине с той же конфигурацией - все в порядке.
 

Alien

Новичок
А отдавать картинку когда рефера нет - нельзя?

т.е запрещать только чужие явные реферы.
 

VaDima

Guest
в том-то и дело, что отдавать надо только с "нашим" рефером и запрещать при "чужих" реферах или отсутствии оных.

Но есть случаи, когда "наш" рефер не приходит, и честный юзер не получает, что ему причитается.

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

Alien

Новичок
Можно ввести еще одну степень защиты.

Пользователь посетил страницу => ставим сессионную куку1.
Пользователю с кукой1 разрешаем смотреть картинки без рефера %)
 

VaDima

Guest
вариант: у пользователя параноидальные настройки, куки запрещены, а увидев в панели статуса ссылку вроде

http://заведомо_подозрительный_сайт/допустим_страничка?sess=что-то_непонятное_а_потому_враждебное

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

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

Alien

Новичок
Плохой, нечестный пользователь, который решил спереть картинку - он ее у тебя сопрет %)

Если ты ему ее показал конечно.

А вот пресечь "кинуть другу по аське урл картинки" - это поможет.
 

VaDima

Guest
это аксиома, согласен.

Но ихображение - фигня.

жабаскрипт спрятать - вот насущная задача
 

Alien

Новичок
Не страдай паранойей.
Правильно "настроенный" прокси-сервер выдаст все твои секреты и сложит в папочку все скрипты с картинками.
 

VaDima

Guest
:)

а я вовсе и не страдаю - это так, жажда познания

к слову, попалась мне однажды интересная одна страничка, заглядываю внутрь, а там <SCRIPT language="encoded"> и бинарность типа BASE 64...
 
Сверху