от
У меня есть контроль над HTTP-сервера, но не за applicationserver или Java-приложений, сидя там, но мне нужно, чтобы заблокировать прямой доступ к определенным страницам на этих приложений. Точно, я не хочу, чтобы пользователям автоматизировать доступ к формам выдачи прямых получить/пост HTTP-запросов в соответствующий сервлет. Итак, я решил заблокировать пользователей на основе значения
HTTP_REFERER
. В конце концов, если пользователь осуществляет навигацию внутри сайта, она будет иметь соответствующий
HTTP_REFERER
. Ну, вот что я думал. Я реализовал правило переписать в .htaccess файл, который говорит:
RewriteEngine on 

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

Я ожидал, чтобы запретить доступ пользователям, не ориентироваться на сайте, но прямой вопрос обращения на "servlet1" или "servlet2" сервлеты с помощью строки запросов. Но мои ожидания внезапно закончилась, потому что регулярное выражение (servlet1|servlet2)/. \?. 
не работал вообще. Я был очень разочарован, когда я изменил это выражение в
(servlet1|servlet2)/. 
и она работала так хорошо, что мои пользователи были заблокированы независимо от того, если они перемещаться на сайте или нет. Итак, мой вопрос: Как я могу достичь этого не позволяет "роботы" с прямым доступом к определенным страницам, если у меня нет доступа/льготы/время, чтобы изменить приложение?

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.

10 Ответы

0 голосов
от
У меня есть контроль над HTTP-сервера, но не за applicationserver или Java-приложений, сидя там, но мне нужно, чтобы заблокировать прямой доступ к определенным страницам на этих приложений. Точно, я не хочу, чтобы пользователям автоматизировать доступ к формам выдачи прямых получить/пост HTTP-запросов в соответствующий сервлет. Итак, я решил заблокировать пользователей на основе значения
HTTP_REFERER
. В конце концов, если пользователь осуществляет навигацию внутри сайта, она будет иметь соответствующий
HTTP_REFERER
. Ну, вот что я думал. Я реализовал правило переписать в .htaccess файл, который говорит:
RewriteEngine on 

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

Я ожидал, чтобы запретить доступ пользователям, не ориентироваться на сайте, но прямой вопрос обращения на "servlet1" или "servlet2" сервлеты с помощью строки запросов. Но мои ожидания внезапно закончилась, потому что регулярное выражение (servlet1|servlet2)/. \?. 
не работал вообще. Я был очень разочарован, когда я изменил это выражение в
(servlet1|servlet2)/. 
и она работала так хорошо, что мои пользователи были заблокированы независимо от того, если они перемещаться на сайте или нет. Итак, мой вопрос: Как я могу достичь этого не позволяет "роботы" с прямым доступом к определенным страницам, если у меня нет доступа/льготы/время, чтобы изменить приложение?
0 голосов
от
Я не уверен, если я могу решить это на одном дыхании, но мы можем пойти назад и вперед по мере необходимости. Во-первых, я хочу повторить то, что я думаю, что вы говорите, и убедитесь, что я чист. Вы хотите запретить запросы на servlet1 и servlet2 запрос не имеет правильного реферера, и в нем есть строки запроса? Я не уверен, я понимаю (servlet1|servlet2)/. \?. потому что, похоже, вы не требуется файл под servlet1 и 2. Я думаю, может быть, вы совмещаете переменной path_info (перед "?") С сделать строку запроса (после "?"). Похоже, что path_info часть будет работать, но получить тестовый запрос не будет. Я сделал быстрый тест на моем сервере, используя script1.CGI и script2.CGI и следующие правила работали для достижения того, что вы просите. Они, очевидно, отредактировал немного, чтобы соответствовать моим окружением:
RewriteCond %{HTTP_REFERER} !^http://(www.)?example.(com|org) [NC]
RewriteCond %{QUERY_STRING} ^. $
RewriteRule ^(script1|script2)\.cgi 

Выше поймал все неправильно-реферер просит 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 

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

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

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

(Кстати, я согласен, что блокирование реферер плохой безопасности, но я также понимаю, что реальности сил несовершенные и частичные решения, Иногда, которые вы не признаете.)
0 голосов
от
У меня нет решения, но я уверен, что опираясь на реферер не будет работать, потому что User-агенты бесплатно, чтобы не отправить его на всех или подменить его на что-то, что позволит им в.
0 голосов
от
Вы не можете отличить пользователей и вредоносные скрипты по HTTP-запроса. Но вы можете проанализировать, какие пользователи запрашивают слишком много страниц за слишком короткое время, и заблокировать их IP-адресов.
0 голосов
от
Используя реферер-это очень ненадежный способ проверки. Как другие люди упомянули, это легко подделать. Вашим лучшим решением будет изменить приложение (если вы можете) Вы можете использовать капчу, либо установить какой-то файл cookie или сессии cookie, который отслеживает, какие страницы пользователь последний раз посещал (а сессия будет сложнее подделать) и отследить просмотр страницы истории, и разрешать доступ только пользователи, которые просматривали страницы в страницу, которую вы хотите заблокировать. Это, очевидно, требует от вас, чтобы иметь доступ к приложению, но это самый надежный способ (не полностью, но "достаточно хорошо" на мой взгляд.)
0 голосов
от
JavaScript-это еще один полезный инструмент для предотвращения (или хотя бы отсрочить) захвата экрана. Большинство автоматизированных инструментов выскабливание не есть интерпретатор JavaScript, так что вы можете делать вещи, как установка скрытые поля и т. д. Редактировать: что-то вдоль линий этого Фила Хаака статьи.
0 голосов
от
Я предполагаю, что вы пытаетесь не допустить захвата экрана? По моему мнению, это сложный вопрос, чтобы решить и исправить, проверяя значение HTTP_REFERER-это просто лейкопластырь. Кто-нибудь собирается заморачиваться автоматизации представления будет достаточно здравого смысла, чтобы отправить правильный реферер от их 'автоматом'. Вы могли бы попробовать ограничение скорости, но без фактического изменения в приложение, чтобы заставить какой-то-это-это-это-человеческое проверки (капчу) в какой-то момент вы собираетесь найти, что это трудно предотвратить.
0 голосов
от
Если вы пытаетесь помешать поисковым роботам доступ к определенным страницам, убедитесь, что вы используете правильно отформатированный файл robots.txt . Используя HTTP_REFERER ненадежны, потому что его легко подделать. Другим вариантом является, чтобы проверить строку агента пользователя для известных ботов (это может потребовать модификации кода).
0 голосов
от
Чтобы сделать вещи немного более ясно: Да, я знаю, что через HTTP_REFERER совершенно ненадежен и несколько по-детски, но я уверен, что люди, которые узнали (от меня?) чтобы автоматизация с помощью VBA Excel не будет знать, как подавить HTTP_REFERER в промежуток времени для окончательного решения. Я не имею доступа/права на изменение кода приложения. Политика. Верите ли вы, что? Итак, я должен ждать, пока правообладатель внести изменения, которые я просил. Из предыдущего опыта, я знаю, что запрашиваемые изменения вступят в два месяца, чтобы войти в производство. Нет, бросая их гибких методологий книг в их головах ничего не улучшится. Это приложение интрасеть. Так что у меня нет много малолеток пытается подорвать мой престиж. Но я достаточно молод, чтобы попытаться подорвать престиж "очень необычные мировых консалтинговых услуг, которая приходит из Индии", но где, как ни странно, нет ни одного индийца работающего там. Пока самый лучший ответ "Мишеля де Маре": блокировать пользователей на основе их IP-адресов. Хорошо, что я вчера сделал. Сегодня я хотел сделать что-то более общее, потому что у меня много пользователей, кенгуру (прыжки с IP-адреса к другому), потому что они используют VPN или DHCP.
0 голосов
от
Вы могли бы использовать анти-CSRF токен, чтобы достичь того, чего вы после этого. Эта статья объясняет это более подробно: подделка межсайтовых запросов
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...