HTTP_REFERER должен быть заполнен, когда пользователь говорит браузеру «обновить»? - PullRequest
2 голосов
/ 11 августа 2009

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

Кажется, что иногда MSIE не включает реферера при обновлении. Это ожидаемое поведение? В любом случае я могу обнаружить обновление, поэтому я знаю, что с отсутствующим реферером все в порядке?

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

Ответы [ 5 ]

2 голосов
/ 11 августа 2009

Учитывая, что rfc2616 точно не указывает, что происходит при "перезагрузке" (он только упоминает, что Referer: НЕ ДОЛЖЕН быть отправлен, если URI получен из источника, который не имеет своего собственного URI) , может быть некоторая изменчивость.

Однако, учитывая то, что вы говорите в контексте "безопасности", мне интересно, возможно, вы ожидаете, что Referer: перейдет при переходе со страницы, доступной по HTTPS, на страницу, доступную по HTTP, и при нажатии на Обновить, раздел 15.1.3 содержит конкретное упоминание об этом:

Clients SHOULD NOT include a Referer header field in a (non-secure)
HTTP request if the referring page was transferred with a secure
protocol.

Я бы не стал доверять Рефереру: с точки зрения безопасности. Во-первых, потому что сам стандарт упоминает, что это должно быть регулируемым (rfc2616, стр. 151):

The information sent in the From field might conflict with the user's
privacy interests or their site's security policy, and hence it
SHOULD NOT be transmitted without the user being able to disable,
enable, and modify the contents of the field. The user MUST be able
to set the contents of this field within a user preference or
application defaults configuration.

Во-вторых, с практической точки зрения, контроль над этим полем, например для Firefox: about, config, network.http.sendRefererHeader, документированный, например на здесь .

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

2 голосов
/ 11 августа 2009

Обновление страницы обычно вызывает браузер для повторной отправки запроса, который использовался для получения текущей страницы. (Это также причина, по которой вас спрашивают, хотите ли вы повторно отправить запрос POST.) Поэтому Referer будет отправляться только в том случае, если предыдущий запрос уже содержал Referer.

1 голос
/ 11 августа 2009

Остерегайтесь того, что MSIE не отправит реферер, если вы перешли по ссылке через JavaScript, это известная ошибка (которая не видела никаких обновлений с момента разработки IE6)

//e.g. this will not send the referer in IE
location.href = 'somepage.html';

//and I believe it also affects
location.reload();
1 голос
/ 11 августа 2009

Реферер не устанавливается при кликах по закладкам или когда пользователь вводит URL.

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

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

0 голосов
/ 11 августа 2009

Большинство браузеров отправит исходный запрос Это означает, что реферер будет включен, если он есть в исходном запросе.

...