Является ли Apache RedirectMatch хорошим решением для этих URL?
У меня есть приложение Rails, которое выдает исключения, когда я получаю несколько странных URL-адресов с большим количеством мусорных символов. Например
https://example.com/pages/28-faq-common-questions-answered++++++++++++++++++++++++Result:+%ED%E5+%ED%E0%F8%EB%EE%F1%FC+%F4%EE%F0%EC%FB+%E4%EB%FF+%EE%F2%EF%F0%E0%E2%EA%E8
Я определенно хочу избавиться от этих исключений Rails. Эти запросы никогда не генерируются подлинным пользователем.
Я думал об использовании RedirectMatch в Apache и просто перенаправлял эти типы запросов на домашнюю страницу сайта.
Вопрос 1: Это хорошая идея или есть что-нибудь лучше?
Вопрос 2: Как создать правила, чтобы сделать это успешно с достаточной гибкостью, чтобы мне не приходилось писать много правил каждый раз, когда новый робот попадает на мой сайт?
Моя грубая попытка заключалась в следующем, но ничего не происходит. Кажется, это не работает вообще.
RedirectMatch permanent /\+\+\+\+\+/g https://example.com
2 ответа
Вопрос 1: Это хорошая идея или есть что-нибудь лучше?
Вопрос 2: Как создать правила, чтобы сделать это успешно с достаточной гибкостью, чтобы мне не приходилось писать много правил каждый раз, когда новый робот попадает на мой сайт?
Лучшее исправление, которое также по совпадению решает и проблему №2, - это исправление вашего приложения таким образом, чтобы оно не генерировало исключительные ситуации при попадании в недействительные запросы. Вместо этого он должен проверить все необходимые предварительные условия на входе и аккуратно выручить на случай, если с входом что-то не так, записав все подходящие данные и отобразив дружественное сообщение об ошибке для пользователя.
Если по какой-либо причине приложение не может быть легко изменено для этого, подумайте, по крайней мере, обернуть его во внешний контейнер, который может перехватывать исключения, регистрировать их подробности и предоставлять пользователю дружественное сообщение об ошибке, которое не включает исключение. подробности. Это не решит основную проблему, но, по крайней мере, предотвратит неудобства пользователя при трассировке стека.
Проблема приложений, генерирующих исключения, раскрывающие информацию о стеке, также недавно обсуждалась на нашем дочернем сайте Information Security в вопросе. Должен ли я быть обеспокоен, если мой веб-сайт выбрасывает информацию о стеке?, В настоящее время ответ на этот вопрос, получивший наибольшее количество голосов (безусловно), начинается с заявления:
В производственных средах (в отличие от среды разработки) следы стека и сообщения об ошибках должны записываться в файл, а не выводиться на экран. Это потому, что злоумышленник может узнать о вашей системе такие вещи, которые могут помочь скомпрометировать вашу систему.
Если вы исправите приложение для работы таким образом, вам также вообще не понадобятся правила перенаправления.
Вы бы использовали mod_rewrite с таким правилом:RewriteRule \+\+\+\+\+ [F]
Затем вы вернете клиенту запрещенный код ошибки, который не позволит серверу выполнять более бесполезный (в контексте бесполезного запроса) код.