Переименовываем и защищаем admin.php
- Ограничение доступа к файлу admin.php по IP через .htaccess.
- Ограничение доступа к файлу admin.php по паролю через .htaccess и .htpasswd.
- Переименовывание файла admin.php.
Недостатки каждого из методов будут описаны в конце.
1. Ограничение доступа к файлу admin.php по IP через .htaccess
Здесь все просто. Узнаем свой IP (например на сайте
Для просмотра ссылки Войди или Зарегистрируйся) и дописываем к файлу
.htaccess (в корне форума) следующее:
Код:
<Files admin.php>
Order deny,allow
Deny from all
Allow from 111.222.33.44
</Files>
ErrorDocument 403 http://свой сайт.ру
Вместо IP 111.222.33.44 указываем, естественно, свой.
Если нужно пускать в админку и другие IP, то дописываем следующие через пробел:
Код:
<Files admin.php>
Order deny,allow
Deny from all
Allow from 111.222.33.44 112.223.34.45 113.224.35.46
</Files>
Также можно указывать маски диапазона (может быть полезно, если у вас динамический IP). Ниже указаны примеры маски.
Код:
100.99.88.x = 100.99.88.0/24
100.99.x.x = 100.99.0.0/16
100.x.x.x = 100.0.0.0/8
То есть, указав 100.99.88.x мы будем пускать IP с 100.99.88.0 по 100.99.88.255.
Кстати, вот тут неплохой IP-калькулятор:
Для тех же, у кого не прописан IP, будет выдаваться страница с ошибкой 403:
Код:
Forbidden
You don't have permission to access /forum/admin.php on this server.
2. Ограничение доступа к файлу admin.php по паролю через .htaccess и .htpasswd.
Генерируем файл
.htpasswd, задав логин и пароль. Можно воспользоваться следующим сервисом:
Код:
http://www.htaccesstools.com/htpasswd-generator/
Вводим желаемый логин и пароль и получаем что-то типа: login:$apr1$sOXY....$C4/V8oJK89nf3D3OEIs5Q/
Сохраняем полученную строчку в файл
.htpasswd и загружаем его на сервер. Желательно расположить его выше корня сайта, т.е. там, куда посетители не могут добраться.
Дальше нужно поправить
.htaccess, который в корне форума, дописав туда следующее:
Код:
<Files admin.php>
AuthUserFile /путь/относительно/корня/веб-сервера/до/файла/.htpasswd
AuthType Basic
AuthName "Какой-нибудь заголовок для диалогового окна авторизации"
Require valid-user
</Files>
Теперь при запросе
admin.php нужно будет сначала ввести наш новый логин и пароль, и уже только после этого можно будет вводить логин и пароль администратора XenForo.
3. Переименовывание файла admin.php.
Ну тут все просто.
Меняем в корне форума имя у файла
admin.php на что-то свое, например,
adminka.php.
Но это еще не все. Многие ссылки в админке не будут теперь работать. Поэтому необходимо открыть
library/XenForo/Link.php и найдя:
Код:
$outputLink = 'admin.php' . ($append !== '' ? '?' : '') . $append;
заменить
admin.php на наше новое имя:
Код:
$outputLink = 'adminka.php' . ($append !== '' ? '?' : '') . $append;
В шаблоне
moderator_bar находим строку:
Код:
<a href="admin.php" class="acp adminLink"><span class="itemLabel">{xen:phrase admin_control_panel}</span></a>
и также меняем
admin.php на наше новое имя файла.
И еще в шаблоне
PAGE_CONTAINER находим:
Код:
<a href="admin.php">{xen:phrase reopen_via_admin_control_panel}</a>
и меняем
admin.php.
И не забываем проделывать эти 4 операции после каждого обновления еще раз!
=============================================================
Недостаток 1-го способа очевиден. Если у вас динамический IP или же к админке должны иметь несколько человек с разными IP, то этот вариант будет несколько затруднительным. Придется вписывать много IP.
Второй способ плох тем, что пароль в админку нужно вводить 2 раза, причем в каждом случае он должен быть разным. Ну и кроме того, у неопытных пользователей даже с инструкцией могут возникнуть вопросы, как правильно защититься дополнительным паролем.
Ну а третий способ плох тем, что необходимо править файл (пусть и один, но все же). Это значит, что при каждом обновлении форума нужно не забыть переименовать обновленный
admin.php и заменить новое имя в файле
Link.php.
Заметка:
В 1.1.3 в шаблоне
PAGE_CONTAINER отсутствует код
Код:
<a href="admin.php">{xen:phrase reopen_via_admin_control_panel}</a>
Ищем шаблон
notice_board_closed а в нем код
Код:
<a href="admin.php?options/list/boardActive">{xen:phrase reopen_via_admin_control_panel}</a>
Ищем шаблон
navigation_visitor_tab, а в нем код
Код:
<a href="admin.php" class="acp navLink adminLink"><span class="itemLabel">{xen:phrase admin_cp}</span></a>
Меняем на своё название.
- Защищаемся от залива шелл:
Достаточно часто заливают шелл в папку с аватарами. В XenForo к сожалению нет способа (покрайней мере я не нашел) хранить аватарки в БД, поэтому в папку Avatars и во все ее внутренние папки заливаем файл
.htaccess с таким содержанием:
Код:
RemoveHandler .phtml
RemoveHandler .php
RemoveHandler .php3
RemoveHandler .php4
RemoveHandler .php5
RemoveHandler .cgi
RemoveHandler .exe
RemoveHandler .pl
RemoveHandler .asp
RemoveHandler .aspx
RemoveHandler .shtml
<Files ~ "\.php|\.phtml|\.cgi|\.exe|\.pl|\.asp|\.aspx|\.sht ml">
Order allow,deny
Deny from all
</Files>
Теперь если кулл хацкер и сможет что то залить, то запустить скрипт ему не удастся.
- Для nginx в конфиг сайта:
Код:
location = /admin.php$ {
auth_basic "Restricted Area";
auth_basic_user_file htpasswd; # файл в директории конфигов nginx /etc/nginx/htpasswd
}
в него прописывается пара логин:пароль. Пароль можно сгенерировать тут:
Код:
http://www.htaccesstools.com/htpasswd-generator/
либо по IP
Код:
location = /admin.php$ {
allow 127.0.0.1; # список разрешённых IP
deny all;
}
можно оба варианта использовать
Код:
location = /admin.php$ {
allow 127.0.0.1; # список разрешённых IP
deny all;
auth_basic "Restricted Area";
auth_basic_user_file htpasswd; # файл в директории конфигов nginx
}