基本上,我们有一个 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>
答案1
答案2
为什么您认为在 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 等于上面的 IP,它可以自由编辑和阅读 Wiki。
也许您可以采用类似的方式破解 WikkaWiki 的 PHP。
答案3
要将 wiki 限制为仅限获得登录凭据的用户,您可以编辑 wikka.php 第 405 行(正上方$wikka->Run
),添加以下几行。
if('UserSettings' != $page and
!is_array($wakka->GetUser())) {
header('Location: /UserSettings');
exit;
}
然后,在您的 wikka 配置中,您还需要阻止允许新注册通过。否则,有人可能会简单地注册并查看您的重要信息。在第 51 行,将以下内容从:
'allow_user_registration' => '1',
到:
'allow_user_registration' => '0',
现在,除了登录页面(“用户设置”)之外,每个人都需要输入密码才能访问任何 wiki 页面。这并不是一件坏事,因为登录后浏览 wiki 的速度会更快,因为它不需要进行主机名查找!
虽然不完全是我所希望的,但它确实有效。
感谢大家的所有建议。
答案4
尝试这个:
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
因为顶层指令应该强制任何外部请求者首先进行身份验证。