WP在子文件夹中时对作者查询字符串的HTACCESS重写

时间:2018-08-09 作者:D. Dan

我已经成功地禁止访问任何类型的作者页面/author/username/ 或者?author={#id} 查询字符串。

我在htaccess文件的开头添加了以下内容:

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_URI} ^/author/
    RewriteRule .* - [F]
    RewriteCond %{QUERY_STRING} ^author=([0-9]*)
    RewriteRule .* - [F]
</IfModule>
但是,当wordpress实际位于子目录中时,同样的方法不起作用。

第一部分工作:

RewriteCond %{REQUEST_URI} ^/subdir/author/
RewriteRule .* - [F]
但无论我如何编辑第二部分/subdir/?author=1 带我去/subdir/usernumber1/ 这是被禁止的,但这违背了它的全部目的。

有什么想法吗?

Edit:

是的,我试图阻止显示用户名。

在昨天的最后一刻,我想出了一个解决方案:

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_URI} ^/subdir/author/
    RewriteRule .* - [F]
    RewriteCond %{REQUEST_URI} ^/subdir/
    RewriteCond %{QUERY_STRING} ^author=([0-9]*)
    RewriteRule .* - [F]
</IfModule>
根据下面的答案,我可能会缩短它(对此我非常感谢)。

是的,它被放置在子目录中。

第一个代码片段放在根目录中,但没有起作用(或者可能是我一路上尝试的一些解决方案实际上起作用了,但我已经缓存了指向作者页面的重定向,我不确定)。

5 个回复
SO网友:Iceable

问题是如何使用.htaccess, 但是为什么不在WordPress中禁用作者页面呢?

这将实现相同的结果,同时使子目录关注点完全不相关(并且无论permalink结构设置如何,也可以工作)

将指向作者页的所有URL设置为404错误的示例代码:

add_action( \'template_redirect\',
        function() {
                if ( isset( $_GET[\'author\'] ) || is_author() ) {
                        global $wp_query;
                        $wp_query->set_404();
                        status_header( 404 );
                        nocache_headers();
                }
        }, 1 );
add_filter( \'author_link\', function() { return \'#\'; }, 99 );
add_filter( \'the_author_posts_link\', \'__return_empty_string\', 99 );
(代码取自此插件:Disable Author Archives)

SO网友:scytale

我假设您试图阻止扫描仪获取您的站点用户名。为了安全起见,我认为应该在第一个可能的外围大门进行封锁,即。htaccess不是PHP。

不知道细分曲面为什么会导致问题;您可以尝试将您的条件添加到根目录和WP子目录中的htaccess文件中,这肯定不会造成任何伤害。我使用的重写条件与您的非常相似,它适用于我在subdir中有WP或没有WP的站点:

RewriteCond %{QUERY_STRING} author=
# redirect away from site
RewriteRule (.*) https://www.fbi.gov/investigate/cyber/%1 [R=302,L]
我还使用了Jeff Starr\'s 6G "firewall" 额外检查WPScan 用户代理。该扫描器深受黑客欢迎,一些在线“输入URL”安全扫描器也使用该扫描器来识别管理员用户、使用易受攻击的插件等。显然,用户可以更改UA,但合法的在线扫描器和脚本小子似乎并不介意:

<IfModule mod_setenvif.c>
  # numerous 6G UA Checks (OMITTED)
  #check for WPScan
  SetEnvIfNoCase User-Agent "WPScan" bad_bot
  # Apache >= 2.3
  <IfModule mod_authz_core.c>
    <RequireAll>
    Require all Granted
    Require not env bad_bot
    </RequireAll>
  </IfModule>
</IfModule>

re M Kaplun\'s comment on OP:

我不知道Mark\'s plugin; 尽管我对PHP发表了评论,但它显然是一个很好的开箱即用的一站式解决方案。我采用了另一种方法(通过Mark提到的主题“解决”了用户名泄漏的问题)。

更改显示名称(通过WP Dashboard)和作者slug(在users表中编辑“user\\u nicename”;或使用Edit Author Slug plugin) 与用户名完全不同。

因此:

对作者querystring(黑客)的请求进行重定向(上面有2行htaccess)。

通过主题添加到帖子的作者链接仍然友好(&L);工作它们会将您带到相关的“作者页面”——但作者slug不再识别用户名。e、 g.在我的网站上,(有效的)作者链接(显示名称“AW”)会将您带到https://wptest.means.us.com/author/not-for-scanners/ 查看我的帖子列表。

对于作者众多的网站来说,这是不现实的。也许(@Mark kaplen@Mark kaplen)的插件可以扩展以自动更改段塞(散列数据库中的所有user\\u nicename?)?

Are publicly viewable usernames a risk?

Wordpress。组织一致认为用户名“泄漏”是not a security risk . 但它提供了潜力for some users to be hacked on first attempt (no brute force needed).

你不需要是个天才就能意识到/author/hclintongmailcom 表示他们是作者,电子邮件和(不区分大小写)用户名为hclinton@gmail.com.

有10亿多个电子邮件地址的黑客密码列表(根据回忆)(针对一小部分尝试您的密码https://haveibeenpwned.com/); 许多用户在不同的站点上使用相同的从不更改密码。So an author with an email username and a password compromised on another site might be "hacked" at first attempt on your site.

SO网友:MrWhite

正如@Iceable所建议的那样,这可能是最好的处理方式,而不是使用.htaccess, 但是,要回答您的具体问题。。。

但不管我怎么编辑第二部分。。。

您不需要编辑“第二部分”。“第二部分”只是检查查询字符串,而不是URL路径,当WordPress安装在子目录中时,URL路径不会改变。

此外,假设.htaccess 文件位于WordPress安装所在的子目录中,这样可以简化指令。无需引用子目录:

RewriteRule ^author/ - [F]
RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* - [F]
无论WP安装在何处,只要.htaccess 文件位于WP安装的根目录中。

使用RewriteRule 模式(如果可能),而不是对照REQUEST_URI 服务器变量。此外RewriteRule <模式匹配URL路径减去目录前缀(因此这自然适用于任何子目录,无需额外工作)。鉴于REQUEST_URI 服务器变量包含整个URL路径,因此必须显式说明任何子目录。

此外,不需要<IfModule mod_rewrite.c> 容器,除非这些指令是可选的。

SO网友:AJMartel

我的网站重定向?author={#id} query string,在谷歌上搜索查询字符串本身。

我通过将以下内容添加到我的。htaccess文件:

# Block User ID Phishing Requests
<IfModule mod_rewrite.c>
    RewriteCond %{QUERY_STRING} ^author=([0-9]*)
    RewriteRule (.*)  https://www.google.com/search?q=?author=%1
</IfModule>

SO网友:AJMartel

<IfModule mod_rewrite.c>
    RewriteCond %{QUERY_STRING} ^author=([0-9]*)
    RewriteRule (.*)  https://www.google.com/search?q=?author=%1 [L,R=301]
</IfModule>
抱歉,忘记添加部件[L,R=301]否则,您可能会得到意外的结果。

结束

相关推荐

使用.htaccess或挂钩重写URL

我有自定义模板,在该自定义模板中,我根据下拉列表过滤数据。我正在使用GET方法过滤这些数据。如果浏览器点击此url:-http://localhost/about-fruad-new/search-providers/?industry%5B%5D=financial_services 我想用这个url替换它,http://localhost/about-fruad-new/search-providers/?financial_services 到目前为止我试过的代码,functio