Home » Apache » htaccess »

301 редирект в .htaccess для странички автора

Проблема:

В логе сайта видим

http://мойсайт.ru/?author=1 
// и WordPress открывает страницу с адресом 
http://мойсайт.ru/author/username/

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

Что делать?

Вариант 1: Постоянный редирект для одного пользователя

Если на сайте нет других пользователей, просмотр архива записей конкретного пользователя-автора не имеет смысла, т.к. блог единственного автора совпадает с блогом сайта, и это просто дублирование контента.
Тогда почему бы не использовать постоянный редирект для конкретного пользователя?
Постоянный редирект в общем виде:

Redirect 301 /old-page.html http://www.yourwebsite.com/new-page.html

!!! это работает:

# Постоянный редирект со страницы архива автора username на блог сайта
Redirect 301 /author/username/ http://мойсайт.ru/blog/

Но лучше использовать универсальное решение, без указания конкретного username

Вариант 2: Постоянный редирект с параметром

В общем виде:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^oldparam=value$
RewriteRule ^page\.html$ http://www.yourwebsite.com/new-page.html?newparam=newvalue [L,R=301]

Директива RewriteCond используется в модуле mod_rewrite сервера Apache, который выполняет URL-преобразования на лету. Переменная %{QUERY_STRING} задает условие - строку запроса в URI после знака вопроса.

В исходном url-адресе есть параметр author:
http://мойсайт.ru/?author=1

# Постоянный редирект на блог сайта для url с параметром author=число 
RewriteEngine On
RewriteCond %{QUERY_STRING} ^author=\d+$
RewriteRule / http://мойсайт.ru/blog/ [L,R=301]

QUERY_STRING - строка после знака вопроса в url страницы
содержит строку ^author=\d+$
\d+ задает число с любым количеством цифр

Вариант 3: Запрет просмотра страницы с параметром в htaccess -- ошибка 403

RewriteEngine On
RewriteCond %{QUERY_STRING} ^author=\d+$
RewriteRule ^ - [F,L]

RewriteRule ^ - [F,L] означает, что при выполнении заданного условия url не перезаписывается:
[F] доступ запрещён, [L] перезапись url останавливается

При попытке зайти на страницу в адресе которой есть /?author=1 (или другое число), получаем ошибку 403:

Forbidden You don't have permission to access this resource!

*** Пример условия:
пользователь с номером 1 или 20: ^author=(1|20)$

Вариант 4: Блокируем все запросы страниц авторов

В логах сайта видим, что злоумышленник отправляет GET запрос вида  /author/username/page/7/

что равнозначно
http://мойсайт.ru/author/username/page/7/
поэтому добавим условие - /author/ в строке URI:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^author=\d+$ [OR]
RewriteCond %{REQUEST_URI} ^/author/
RewriteRule ^ - [F,L]
Запись опубликована в рубрике htaccess

Leave a Reply

Your email address will not be published. Required fields are marked *