Блокировка доступ пользователей к внутренностям сайта с помощью HTTP_REFERER

голоса
4

У меня есть контроль над HttpServer, но не над ApplicationServer или Java-приложение, сидя там, но мне нужно, чтобы заблокировать прямой доступ к определенным страницам на этих приложениях. Именно так, я не хочу пользователям автоматизировать доступ к формам, выдающих прямые GET / POST HTTP запросы на соответствующий сервлет.

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

Я реализовал правила перезаписи в файле .htaccess, который говорит:

RewriteEngine on 

# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} !^http://mywebaddress(.cl)?/.* [NC]
RewriteRule (servlet1|servlet2)/.+\?.+ - [F]

Я ожидал , чтобы запретить пользователям доступ к ним , не ориентироваться на сайте , но выдавать прямые запросы GET к «servlet1» или «servlet2» сервлетов с использованием querystrings. Но мои ожидания оборвались , потому что регулярное выражение (servlet1|servlet2)/.+\?.+не работало вообще.

Я был очень разочарован , когда я изменил это выражение , (servlet1|servlet2)/.+и она работала так хорошо , что мои пользователи были заблокированы , независимо от того , если они переходите на сайт или нет.

Итак, мой вопрос: Как я могу выполнить эту вещь, не позволяя «роботов» с прямым доступом к определенным страницам, если у меня нет доступа / привилегии / времени, чтобы изменить приложение?

Задан 06/08/2008 в 15:44
источник пользователем
На других языках...                            


9 ответов

голоса
1

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

Ответил 06/08/2008 в 15:49
источник пользователем

голоса
0

Я предполагаю, что вы пытаетесь предотвратить экран выскабливание?

По моему честному мнению, что это очень сложно, чтобы решить, и пытаемся исправить путем проверки значения HTTP_REFERER просто лейкопластыри. Любой будет беспокоить автоматизирующие представления будут достаточно здравым смыслом, чтобы послать правильную реферер от их «автомата».

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

Ответил 06/08/2008 в 16:00
источник пользователем

голоса
1

Вы не можете отличить пользователей и вредоносные скрипты по их запросу HTTP. Но вы можете проанализировать, какие пользователи запрашивают слишком много страниц слишком короткое время, и блокировать их IP-адрес.

Ответил 06/08/2008 в 16:02
источник пользователем

голоса
1

Javascript является еще одним полезным инструментом для предотвращения (или, по крайней мере, задержка) экран выскабливания. Большинство автоматизирован соскоб инструменты не интерпретатор Javascript, поэтому вы можете делать вещи, как установка скрытых полей и т.д.

Изменить: Что - то вдоль линий этой статьи Фил Хаака .

Ответил 06/08/2008 в 16:03
источник пользователем

голоса
1

Использование реферер очень ненадежны в качестве метода проверки. Как и другие люди уже упоминалось, это легко подделать. Лучшим решением является изменение приложения (если можно)

Вы можете использовать капчу, или установить какое-то печенье или куки сессии, которая отслеживает то, что страница последний раз пользователь (сеанс будет труднее подделать) и отслеживать историю просмотра страниц, и только позволяют пользователям, которые просматривали страницы требуется, чтобы добраться до страницы, которую вы хотите заблокировать.

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

Ответил 06/08/2008 в 16:08
источник пользователем

голоса
0

Если вы пытаетесь предотвратить поисковые боты доступа к определенным страницам, убедитесь , что вы используете правильно отформатированный robots.txt файл.

Использование HTTP_REFERER ненадежен , так как он легко подделать .

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

Ответил 06/08/2008 в 16:32
источник пользователем

голоса
0

Для того, чтобы сделать вещи немного более ясно:

  1. Да, я знаю, что использование HTTP_REFERER совершенно ненадежны и несколько по-детски, но я уверен, что люди, которые узнали (от меня может быть?), Чтобы сделать автоматику с Excel VBA не будет знать, как притесняют HTTP_REFERER в пределах промежутка времени, чтобы иметь окончательное решение.

  2. У меня нет доступа / привилегии для изменения кода приложения. Политика. Ты веришь, что? Таким образом, я должен ждать, пока правообладатель сделать изменения, которые я просил.

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

  4. Это приложение интрасети. Так что я не очень много молодых людей, пытающихся подорвать мой авторитет. Но я достаточно молод, чтобы попытаться подорвать престиж «очень фантазии глобальных консультационных услуг, что исходит из Индии», но где, как ни странно, нет ни одного индийского там работают.

До сих пор лучший ответ приходит от «Мишель-де-Маре»: блокировать пользователей на основе их IP-адресов. Ну, что я сделал вчера. Сегодня я хотел сделать что-то более общий характер, потому что у меня есть много пользователей кенгуру (прыжки с адреса Ip к другому), поскольку они используют VPN или DHCP.

Ответил 06/08/2008 в 16:58
источник пользователем

голоса
2

Я не уверен, если я могу решить эту проблему за один раз, но мы можем идти вперед и назад по мере необходимости.

Во- первых, я хочу повторить то , что я думаю , что вы говорите , и убедиться , что я ясно. Вы хотите , чтобы запретить запросы на servlet1 и servlet2 это требование не имеет надлежащего реферер и делает есть строка запроса? Я не уверен , я понимаю (servlet1 | servlet2) /.+\?.+ , потому что это выглядит , как вы требуете файла под servlet1 и 2. Я думаю , может быть , вы объединяете PATH_INFO (до «?») С GET строка запроса (после «?»). Оказывается , что PATH_INFO часть будет работать , но тест на GET - запрос не будет. Я сделал быстрый тест на моем сервере с помощью script1.cgi и script2.cgi и следующие правила работали , чтобы сделать то , что вы просите. Они, очевидно , отредактированные немного , чтобы соответствовать моему окружению:

RewriteCond %{HTTP_REFERER} !^http://(www.)?example.(com|org) [NC]
RewriteCond %{QUERY_STRING} ^.+$
RewriteRule ^(script1|script2)\.cgi - [F]

Выше пойманы все запросы неправильно-Referer в script1.cgi и script2.cgi, которые пытались представить данные, используя строку запроса. Тем не менее, вы можете также представить данные с помощью path_info и размещения данных. Я использовал эту форму, чтобы защитить от любого из трех используемых методов с неправильным реферер:

RewriteCond %{HTTP_REFERER} !^http://(www.)?example.(com|org) [NC]
RewriteCond %{QUERY_STRING} ^.+$ [OR]
RewriteCond %{REQUEST_METHOD} ^POST$ [OR]
RewriteCond %{PATH_INFO} ^.+$
RewriteRule ^(script1|script2)\.cgi - [F]

На примере вы пытаетесь получить работу, я думаю, что это то, что вы хотите:

RewriteCond %{HTTP_REFERER} !^http://mywebaddress(.cl)?/.* [NC]
RewriteCond %{QUERY_STRING} ^.+$ [OR]
RewriteCond %{REQUEST_METHOD} ^POST$ [OR]
RewriteCond %{PATH_INFO} ^.+$
RewriteRule (servlet1|servlet2)\b - [F]

Надеюсь, что это по крайней мере получает вас ближе к вашей цели. Пожалуйста, дайте нам знать, как это работает, я заинтересован в вашей проблеме.

(Кстати, я согласен, что блокирование реферер является низкий уровень безопасности, но я также понимаю, что relaity силы несовершенные и частные решения иногда, что вы, кажется, уже признают.)

Ответил 06/08/2008 в 19:41
источник пользователем

голоса
0

Вы можете быть в состоянии использовать маркер анти-CSRF, чтобы добиться того, что вы после этого.

Эта статья объясняет это более подробно: Request Cross-Site Forgeries

Ответил 20/08/2008 в 14:06
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more