У меня есть пример файла .htaccess
(найден здесь) с плохими роботами, которые нужно заблокировать. Вот небольшой пример кода из этого файла:
#bad bots start
#programmed by tab-studio.com public version 2017.12
#1 new rule every 500 entries
RewriteCond %{HTTP_USER_AGENT} \
12soso|\
192\.comagent|\
1noonbot|\
zuibot|\
zyborg|\
zyte\
[NC]
RewriteRule .* - [F]
#bad bots end
По сути, бросая 403
на совпадение URL. Я проверил эта почта, чтобы увидеть, как я могу преобразовать эти .htaccess
правила в web.config
правило перезаписи через IIS.
Однако когда я импортирую правила, я получаю неожиданный результат, когда никакие правила не преобразуются, см. изображение ниже. Что я делаю неправильно?
Это, конечно, задыхается от \ и возврата каретки. Если вы попробуете следующее, вы увидите, что он должен правильно импортироваться:
#bad bots start
#programmed by tab-studio.com public version 2017.12
#1 new rule every 500 entries
RewriteCond %{HTTP_USER_AGENT} 12soso|192\.comagent|1noonbot|zuibot|zyborg|zyte
[NC]
RewriteRule .* - [F]
#bad bots end
Сказав это, вы можете вместо этого рассмотреть возможность использования фильтрации запросов и заголовков сканирования: https://docs.microsoft.com/en-us/iis/configuration/system.webserver/security/requestfiltering/filteringrules/filteringrule/scanheaders/
Спасибо. Я предполагаю, что вы предлагаете использовать фильтры запросов, потому что это блокирует запросы в более ранний момент, чем правило перезаписи web.config. Теперь мой пример правил .htaccess работает на HTTP_USER_AGENT
, но я вижу здесь пример для IIS, который использует User-agent
(docs.microsoft.com/en-us/iis/configuration/system.webserver/…), есть ли разница?
Он не только работает раньше, но и RequestFiltering является специальным модулем безопасности и имеет встроенную поддержку явного ведения журнала кода состояния (SubStatusCode), когда он что-то блокирует. HTTP_USER_AGENT и User-Agent будут одним и тем же. HTTP_ — это то, как системы ссылаются на данные как на HTTP-заголовок, но в конечном итоге это просто копия значения в фактическом HTTP-заголовке. Под одеялом они оба проверяют одно и то же.
Этот преобразователь имеет свои ограничения. В большинстве случаев вам нужно конвертировать вручную.