2010-09-02 6 views
2

Мы подписываемся на онлайн-ресурс, который использует http-referer как аутентификацию (плохая идея, я знаю), чтобы доказать, что запрос поступает из нашей интрасети (IP-адрес недоступен для этого как существует прокси более высокого уровня).Изменение http-referer через перенаправление

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

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

  1. http://intranet/somerandomurl имеет ссылку на
  2. http://intranet/AuthorisedUrl, который должен быть ссылающейся на
  3. http://externalsite/

есть ли способ сделать это без буквально маки ng люди нажимают на ссылку? (подавляющее большинство браузеров будет IE6 или IE7, если это поможет, если кому-то нужно нажать на ссылку, но я могу использовать JS для большинства, я в порядке с этим).

ответ

2

Поместите этот код на ссылке 2. Для тех, кто с JavaScript включен,

<script type="text/javascript"> 

window.location = "http://example.com/" 

</script> 

Это будет перенаправлять их http://example.com/ как только он выполняет. Поместите это как можно раньше в пределах <head>, так что перенаправление происходит как можно раньше при загрузке страницы.

Затем просто поместите ручную ссылку на страницу для тех, у кого JavaScript отключен.

В любом случае, ссылка 2 будет ссылкой для внешнего.

(Оговорка:. Это действительно, действительно небезопасный метод аутентификации)


EDIT: Похоже, что это известная проблема с некоторыми версиями IE не передавая Referer заголовок после перенаправления Javascript. Вот обходной путь: http://webbugtrack.blogspot.com/2008/11/bug-421-ie-fails-to-pass-http-referer.html

+0

Я думал, что это будет клиентская JS. Существуют ли проблемы с несовместимостью браузера с этим, хотя некоторые из них меняют референт по мере необходимости, а другие нет? (и да, я согласен с этим предостережением, но это не наша система, поэтому я ничего не могу с этим поделать). – Chao

+0

Не должно быть никаких несоответствий браузера, но вы можете проверить его здесь: http://htmlto.com/redirect/1.html. Щелчок по ссылке приведет вас к 2.html, который будет переадресован Javascript на 3.php, который настроен на эхо HTTP_REFERER. Он должен сказать 2.html; если он когда-либо говорит 1.html, у вас есть непоследовательность браузера. – Yahel

+0

Я стою исправлено; IE не передаст http_referer из перенаправления JavaScript; см. мое редактирование для исправления. – Yahel