Назад | Перейти на главную страницу

Заблокируйте доступ к Wiki только паролем, но оставайтесь открытым для подсети через .htaccess

В основном у нас есть Wiki, в которой хранится некоторая конфиденциальная информация - не лучшее, что я знаю, но мой предшественник настроил ее. Я хочу иметь возможность запрашивать доступ по паролю у любого, кто не находится в подсети локальной сети. Те, кто находится в локальной подсети, должны иметь возможность продолжить без ввода пароля.

Следующий .htaccess, похоже, больше не работает, поскольку он разрешает нелокальный доступ, не требуя пароля:

AuthName "Our Wiki"
AuthType Basic
AuthUserFile /path/to/passwd/file
AuthGroupFile /dev/null
Require valid-user
Allow from 192.168
Satisfy Any
order deny,allow

И я не могу понять почему. WikkaWiki, которую он должен защищать, была недавно обновлена, что привело к засорению файла .htaccess, поэтому я восстановил вышеизложенное из памяти / поисковика. Может, мне не хватает важной директивы?

Полный .htaccess выглядит следующим образом:

AuthName "Our Wiki"
AuthType Basic
AuthUserFile /path/to/passwd/file
AuthGroupFile /dev/null
Require valid-user
Allow from 192.168
Satisfy Any

SetEnvIfNoCase Referer ".*(adultsite|picturesplace|learnthebiz|pi-o).*" BadReferrer

order deny,allow
deny from env=BadReferrer

<IfModule mod_rewrite.c>
        # turn on rewrite engine
        RewriteEngine on
        RewriteBase /
        # if request is a directory, make sure it ends with a slash
        RewriteCond %{REQUEST_FILENAME} -d
        RewriteRule ^(.*/[^/]+)$ $1/

        # if not rewritten before, AND requested file is wikka.php
        # turn request into a query for a default (unspecified) page
        RewriteCond %{QUERY_STRING} !wakka=
        RewriteCond %{REQUEST_FILENAME} wikka.php
        RewriteRule ^(.*)$ wikka.php?wakka= [QSA,L]

        # if not rewritten before, AND requested file is a page name
        # turn request into a query for that page name for wikka.php
        RewriteCond %{QUERY_STRING} !wakka=
        RewriteRule ^(.*)$ wikka.php?wakka=$1 [QSA,L]
</IfModule>

ты ошибаешься в этой строке

order deny,allow

должно быть

order allow,deny

Посмотрите на стол в mod_authz_host документация

Почему вы считаете плохим хранить конфиденциальную информацию в Wiki? Если ваши HTTP-соединения работают через TLS, вреда быть не должно.

К твоей проблеме. Мы используем MediaWiki, и я просто попробовал отредактировать LocalSettings.php:

$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['*']['read'] = false;

if ($_SERVER['REMOTE_ADDR']=='192.168.1.1') {
  $wgGroupPermissions['*']['read'] = true;
  $wgGroupPermissions['*']['edit'] = true;
}

... и это работает. Что делает этот фрагмент кода, так это то, что он блокирует чтение / редактирование, если пользователь не вошел в систему. Но если IP-адрес клиента совпадает с указанным выше, он может свободно редактировать и читать Wiki.

Может быть, вы сможете взломать PHP WikkaWiki аналогичным образом.

Попробуй это:

Order deny,allow
Deny from all
AuthName "Our Wiki"
AuthType Basic
AuthUserFile /path/to/passwd/file
AuthGroupFile /dev/null
Require valid-user
Allow from 192.168
Satisfy Any

Вам также следует подумать об удалении / закомментировании этого блока:

SetEnvIfNoCase Referer ".*($LIST_OF_ADULT_WORDS).*" BadReferrer

order deny,allow
deny from env=BadReferrer

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

Чтобы ограничить вики только пользователями, которым были предоставлены учетные данные, вы можете отредактировать wikka.php в строке 405 (прямо над $wikka->Run), добавив следующие строки.

if('UserSettings' != $page and
   !is_array($wakka->GetUser())) {
    header('Location: /UserSettings');
    exit;
}

Затем в конфигурации викки вы также захотите запретить прохождение новых регистраций. В противном случае кто-то мог просто зарегистрироваться и увидеть вашу важную информацию. В строке 51 измените следующее:

'allow_user_registration' => '1',

кому:

'allow_user_registration' => '0',

Теперь каждому будет предложено ввести пароль для доступа к любой вики-странице, кроме страницы входа (UserSettings). Это неплохо, потому что в любом случае гораздо быстрее просматривать вики, когда вы вошли в систему, так как не нужно искать имя хоста!

Не совсем то, на что я надеялся, но тем не менее он работает.

Спасибо за все ваши предложения.