如何通过 htaccess 隐藏我的 Wordpress 安装?

Ave*_*han 9 .htaccess wordpress redirection

(我知道不建议通过默默无闻来保证安全)。

我试图隐藏我正在使用 Wordpress 的事实。这篇文章很有帮助,但它只解决了内容(有点)。我有兴趣发生以下情况:

  1. 用户尝试wp*通过浏览器访问任何带有子字符串的url 。

    结果:重定向到 404 页面。

  2. 博客用户/管理员知道为了登录他们应该去http://example.com/blogin/

    结果: apache 将它们重定向到http://example.com/wp-admin/.

  3. 如果用户尝试wp-admin从他们的浏览器直接访问,他们会被发送到 #1。

    结果:重定向到 404 页面。

到目前为止我做过的事情

  1. 我注意到对于 WordPress 的默认安装,我可以访问wp*WP 安装的(相对)根目录中的任何文件。特别wp-settings.php是有问题,因为它泄露了有关我的设置的信息。如果用户访问它,它会抛出一些 PHP 错误并显示部分目录结构。我编辑了我的 php.ini 文件以display_errors关闭。现在访问http://example.com/wp-settngs.php会出现一个空白页面。

  2. 这本身并不理想,因为它表明wp-settings.php存在。事实上,访问所有不同的wp*文件是可能的(具有不同的结果)。然后我将以下内容放入我的 htaccess 文件中:

          RewriteEngine On
          RewriteBase /
          RewriteCond %{PATH_INFO} wp* [NC]
          RewriteRule .* - [F]
    
    Run Code Online (Sandbox Code Playgroud)

    这很好用!任何带有 a 的内容都wp*被路由到我的自定义 404 页面。但是现在我无法访问我的管理页面。

  3. 我想这条线插入到上面的代码:RewriteRule ^blogin wp-admin [NC,R,L]。它应该是在之后,RewriteBase但这没有用。

  4. 我试图做一个:

    <Directory /home/example/wp*> 
     Order Allow, Deny 
     Allow from example.com 
     Deny from all 
    </Directory> 
    
    Run Code Online (Sandbox Code Playgroud)

    希望来自我网站的推荐人(通过重写规则)能够访问 wp-admin,但不能访问来自外部的人。这也不起作用。apache 抱怨你不能从 htaccess 使用这个指令。

我已经阅读了 apache 文档;我从理论上理解这些概念,但我需要一些实际帮助。

编辑:我正在寻找使用 .htaccess 而不是 httpd.conf 的解决方案,因为我的特定设置使使用 httpd.conf 不一致。

Ave*_*han 9

TLDR;仅在 .htaccess 文件中使用指令是不可能掩盖 WordPress 的。

现在来了一个悲惨和恐怖的故事。我们的朋友 fbh 关于隐藏 WordPress 的困难是对的,这不适合黄腹懦夫。到达!这是这次(错误)冒险的详细信息。你们要小心!

动机

我是喜欢完美事物的人之一。我会时间浪费在工程什么是“正确的方式”。对于默认的 WordPress 设置,我不喜欢的一件事是用户可以输入http://ex.com/wp-settings.php,然后所有这些 php 行话都会喷到各处。我最终能够通过 PHP 关闭错误,但这导致更希望只拥有自服务器可定位资源以来所做的事情……而其他所有内容都将 404/3' 化到我们的自定义搜索页面。在那之后,我有了这个想法,我想完全隐藏底层框架(即 WP)......无论如何......如果你想隐藏 WP 是可能的。但这真的很难。

走向你的厄运

  1. 适当修改您的 PHP ini 设置。(即关闭显示错误)您可能认为这是不必要的,因为如果我们使用 .htaccess 来重新路由事物,人们将不会看到错误,因为他们无法访问导致资源的错误(我正在看着您wp-settings.php)。但是在显示的页面中可能会发生错误,因此您肯定希望它们关闭。仅仅因为WP_*设置了指令并不一定意味着事情会按照您认为的方式进行。我发现在我的服务器上,我必须首先将 display_errors 设置为 false,因为 WP_DISPLAY_ERRORS 假定默认设置为 false。

    控制 PHP ini 设置可能就像在 .htaccess 文件中放置一个指令一样简单。或者,就我而言,就像创建 CGI 处理程序然后将 php.ini 文件放在那里一样复杂。YMMV 取决于您的设置。

  2. 删除对带有wp-前缀的文件/目录的所有访问权限。这个想法是,您的 WP 部署是关于您的内容,而不是关于 WP(除非它专门针对 WP)。人们想看看 http;//ex.com/wp-cron.php 有什么是没有意义的......除非他们不擅长。我通过这个完成了这个:

     # If the resource requested is a `wp-*` file or directory, poop to a 403. 
     RewriteCond %{REQUEST_FILENAME} wp-.*$ [NC] 
     RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
     RewriteCond %{REQUEST_FILENAME} -f [NC,OR] 
     RewriteCond %{REQUEST_FILENAME} -d [NC] 
     RewriteRule .* - [F,L] 
    
    Run Code Online (Sandbox Code Playgroud)
  3. 了解如何通过魔多通过删除对wp-*您的所有访问权限,您将无法再获得对 WP 管理部分的访问权限。这真的很糟糕。除了那种沮丧之外,你刚刚意识到你不知道RewriteCond %{ENV:REDIRECT_STATUS} ^$真正做什么。好吧,我试图做的是给自己一个 WP 管理页面的“秘密”后门。我使用了这个代码:

     # If the resource requested is 'mordor' (with or without an ending
     # slash) do a URL rewrite to `wp-login.php`. 
     RewriteCond %{REQUEST_URI} mordor/?$ [NC]
     RewriteRule mordor/?$ /wp-login.php [NC,L]
    
    Run Code Online (Sandbox Code Playgroud)

    所以 URL:http : //ex.com/mordor应该把我们带到登录页面。我们REDIRECT在上面的步骤中有一行的原因是因为这个 URL 被重写为一个wp-*URL,我们不希望第一个重写规则得到它。由于它是在内部重定向,因此REDIRECT_STATUS将正确设置并且不会将我们推到 403/4 区域。

  4. 删除 wp-content Wordpress.stackexchange有一篇关于删除 wp-content 的很棒的文章。您必须重新定义一些 WP 常量,这几乎可以正常工作。您还必须将所有访问重定向wp-content到“whatever-content”。如果这是一个干净的部署,这可能不会成为问题。如果您要修改预先存在的部署,则必须做一些额外的事情。

  5. 将 URL 重写为 wp-content optional RewriteRule (.*)(wp-content)(.*) $1whatever-content$3 [NC,R,L]。这在您的 .htaccess 文件中。如果您的用户尝试通过wp-contentURL访问某些旧内容,它将被重定向到此处。

  6. Grep 并替换数据库optional 中对 wp-content 的所有引用。你wp-content的数据库里还有。如果你想免费使用 WP,你需要摆脱那些东西。我导出/mysql 转储了我的数据库,进行了搜索并将wp-content字符串替换为新字符串。你可能会说...如果 apache 会重写我的 URL,为什么我必须这样做?问题是源代码将包含这些引用,所以如果你真的对隐藏 WordPress 感兴趣,你需要这样做。注意:此时我应该停止并接受这行不通的现实。但我想让 T 先生可怜我。

  7. 替换对来源wp-includeswp-admin来源中的所有引用。许多 WordPress 功能取决于这两个目录:wp-includeswp-admin. 这意味着这些目录名称在源代码中是硬编码的。这意味着您必须创建新目录(因为 PHP 使用底层操作系统文件系统,而不是 apache)来访问这些目录,然后将这些内容写入发出的 html。这实在是太麻烦了。我很快就放弃了,去洗手间拉便便。

当然,我可以只阅读http://codex.wordpress.org/Hardening_WordPress并遵循这些步骤。但我想要一个完美的网站。现在我只想回到那些小时。阻止我停下来的最大的事情是我没有在互联网上的任何地方读到这是很多工作而且几乎不可能完成。相反,我读到有人试图这样做,但不知道他们是否成功。所以,对于我过去的自己,我将通过 Apple 的 Time Machine 将其发送给他,请不要尝试模糊 WordPress。这不值得。