Я пытаюсь настроить RewriteRule
для Apache 2.4, которое позволяет мне возвращать
код 403, когда какие-либо ключевые слова встречаются в QUERY_STRING
.
Я пытаюсь вернуть 403 всякий раз, когда кто-либо совершает вредоносные атаки, такие как:
wget / etc / passwd
или wp-login
в QUERY_STRING
.
Вот несколько общих примеров, которые я пытаюсь заблокировать:
"GET /wp-login.php HTTP/1.1"
"GET /setup.cgi?next_file=somefile HTTP/1.1"
"GET //public/html HTTP/1.1"
"GET /wget+http://192.168.1.1:8080/etc/passwd HTTP/1.1"
Я понятия не имею, почему это не работает. Я пробовал несколько вещей, чтобы заставить его работать, но пока безуспешно, поэтому я публикую. Я уверен, что это что-то тонкое или легкое.
RewriteCond %{QUERY_STRING} ^/.*(wget|/etc|admin|wp-login|setup|public).*$
RewriteRule .* - [F,NC]
RewriteCond% {QUERY_STRING} ^ /. * (Wget | / etc | admin | wp-login). * $ RewriteRule. * - [F, NC]
вперед косая черта в начале CondPattern , т.е. ^ /. *
- это буквальная косая черта в начале строки запроса, поэтому маловероятно, что это соответствует типу URL-адреса, который вы пытаетесь заблокировать.
Если вы просто хотите сопоставить любой из ряд ключевых слов в любом месте строки запроса, тогда вам не нужны привязки начала и конца строки или охватывающие все сопоставления . *
шаблоны на обоих концах регулярное выражение.
Попробуйте вместо этого следующее:
RewriteCond %{QUERY_STRING} (wget|/etc|admin|wp-login) [NC]
RewriteRule ^ - [F]
Вероятно, вам нужен флаг NC
в директиве RewriteCond
, чтобы строка запроса соответствовала регистронезависимости, но Флаг NC
в RewriteRule
является лишним.
Вы также можете оптимизировать шаблон RewriteRule
, просто установив начало строки (т.е. ^
), а не сопоставление всего (что излишне заставляет обход URL-пути). Для успешного выполнения вам потребуется только RewriteRule
- вы не пытаетесь здесь сопоставить что-либо.
Кроме того, порядок этих директив имеет значение. Любая директива блокировки должна быть перед любыми существующими директивами mod_rewrite.
ОБНОВЛЕНИЕ: Если вы хотите сопоставить только целые слова, а не частичные совпадения. например. Чтобы избежать сопоставления « admin
istrator» и «wo wget
ter» и т. Д., Включите границы слов в регулярное выражение. например. \ b (wget | / etc | admin | wp-login) \ b
.