2009-03-05 9 views
3

Мне нужно попробовать и обмануть HTTP_REFERER передал мою другую страницу, чтобы на целевой странице я мог определить, что запрос поступает с «правой» страницы и выполняет соответствующую логику.Как вы обманываете HTTP_REFERER?

  1. Как это сделать в JavaScript (AJAX)?
  2. Могу ли я сделать это в ASP.Net?

ТИА баранов

ответ

9

Вообще говоря, вы не можете вызвать другие браузеры, чтобы вернуть ложный HTTP_REFERER без эксплойт, плагин, или другого внутреннего абонента. Если вы хотите изменить значение, отправленное из вашего веб-браузера, и вы используете FireFox, посмотрите расширение Modify Headers.

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

+0

спасибо за ссылку. Я проверю это. – rams

+1

Если вы используете Chrome [ModHeader] (https://chrome.google.com/webstore/detail/modheader/idgpnmonknjnojddfkpgkljpfnnfcklj), выполните эту работу! – GiDo

2

Если вы хотите протестировать на целевой странице, идет ли запрос с «правой» страницы, вам не нужно обманывать реферера. Все, что вам нужно сделать, это выдать запрос с другой страницы. Настройте страницу с другим URL-адресом из того, что вы считаете «правильным», и отправляйте запросы оттуда, либо нажав ссылку на целевую страницу, либо разместив изображение, полученное от адресата.

+0

Вызывающая страница из приложения клиента, к которому у меня нет доступа. Поэтому вместо кодирования в темноте мне нужно «обмануть» реферера и протестировать мою страницу. – rams

+0

@Rob, Почему вы говорите ему: «Вам не нужно обманывать реферера»? Это кажется неуместным, поскольку он спрашивает *, как * может быть перенаправлен реферер. – Pacerier

+0

@ Pacerier, он спрашивает: «Как я могу решить проблему X, выполняя Y?«Мой ответ заключается в том, что ему действительно не нужно делать Y, чтобы решить X. В этом случае X должен проверить, что страница может обнаружить реферер, Y - подменять реферер. –

2

Уже упоминалось, что вы не можете на самом деле обманывать вещи. Но для пояснения заголовок HTTP_REFERER генерируется браузером, поэтому на стороне сервера вы не можете его контролировать (в том числе и с передачей javascript, который может быть включен или не включен).

Если вы просто хотите, чтобы проверить реакцию вашей страницы определенных заголовков (например, «Referer:»), вы можете использовать инструменты командной строки, как curl или wget, которые доступны в большинстве BSD и Linux вариантов (включая OS/ИКС). Если вы используете MS Windows, вы можете получить завиток или wget с помощью Cygwin.

wget -O - --referer="http://example.com/some/path" http://example.com/ 

или

curl -e "http://example.com/some/path" http://example.com/ 

Но ваш основной причиной этого является, по-видимому, чтобы «защитить» страницы, я думаю. Если вы действительно хотите удостовериться, что страница (назовите ее «B») посещается только после того, как сначала открывается другая страница («A»), вам нужна более сложная логика на стороне сервера.

Если вы сохраняете файл cookie сеанса, вы можете вставить некоторую логику на странице «A», которая задает логическую переменную. Затем добавьте логику на странице «B», которая проверяет, была ли установлена ​​переменная.

Я оставлю это как упражнение для читателя, чтобы выяснить, как это сделать в ASP.NET. (Потому что я программист PHP. -])

+0

Почему вы говорите, что реферал проверка не может гарантировать, что «страница B запускает логику только после посещения страницы A»? – Pacerier

+0

Это не то, что я сказал. Если вы используете куки-файл, то вы можете убедиться, что файл cookie установлен путем посещения страницы A, а затем B может проверить для этого файла cookie. HTTP_REFERER генерируется браузером, поэтому ему нельзя доверять. – ghoti