如何通过htaccess屏蔽我的Wordpress安装?


9

(我知道不建议您通过晦涩难懂的方式进行安全保护)。

我试图掩盖我正在使用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]
    

    这很棒!任何带有的内容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> 
    

    希望我站点中的引荐来源网址(通过重写规则)能够访问wp-admin,但不能访问外部访问者。这也不起作用。apache抱怨您不能从htaccess使用此指令。

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

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


您是否尝试过将所有wp *文件重命名为不同的前缀以及更改对此类文件的所有引用?我认为这将是最容易的事情。当然,您可以进行URL重写,但是随后您必须确保所有链接也都没有使用wp *名称,(在我看来)这与原始建议非常相似。
LazyOne 2011年

我认为URL重写的好处之一是可以将请求的资源重新映射到另一个前缀...我希望我可以在不重命名所有文件的情况下做到这一点(这是完成此操作的重点)...
Avery Chan

Answers:


8

TLDR;只能通过使用.htaccess文件中的指令来掩盖WordPress。

现在是一个关于灾难与恐怖的故事。我们的朋友fbh认为隐藏WordPress的难度是正确的,而不是黄腹co夫。!这是此(误)冒险的详细信息。被警告!

动机

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

走向厄运的步骤

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

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

  4. 删除wp内容 Wordpress.stackexchange上有一篇很棒的文章介绍删除wp内容。您必须重新定义一些WP常量,并且几乎可以正常工作。您还必须将所有访问从重定向wp-content到“任何内容”。如果这是一个干净的部署,这可能不会成为问题。如果要修改现有的部署,则必须做一些额外的事情。

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

  6. Grep并替换所有在DB optional中对wp-content的引用。您wp-content的数据库中仍然有。如果要免费使用WP,则需要清除这些内容。我导出/ mysql转储了数据库,进行了搜索并将wp-content字符串替换为新字符串。您可能会说...如果apache会重写我的URL,为什么我必须这样做?问题在于源代码将包含这些引用,因此,如果您真的对隐藏WordPress感兴趣,则需要这样做。注意:在这一点上,我应该停止并接受一个事实,那就是这行不通。但我希望T先生可怜我。

  7. 替换源中所有wp-includes和的引用wp-adminWordPress的许多功能取决于这两个目录:wp-includeswp-admin。这意味着这些目录名称在源代码中进行了硬编码。这意味着您将必须创建新目录(因为PHP使用底层OS文件系统而不是Apache)来访问这些目录,然后将这些内容写到发出的html中。这太麻烦了。我迅速放弃了,去洗手间大便。

当然,我可以只阅读http://codex.wordpress.org/Hardening_WordPress并按照这些步骤进行操作。但是我想要一个完美的网站。现在我只想把所有这些小时都回来。阻止我停止工作的最大原因是,我在互联网上的任何地方都看不到这是一项繁重的工作,几乎无法完成。取而代之的是,我读到有人试图做到这一点,而不知道他们是否成功。因此,对于过去的自我(我将通过Apple的Time Machine发送给我),请不要尝试使WordPress晦涩难懂。这不值得。


好吧,艾利,我也是一个想要完美的人。首先,我想通过隐藏我使用wordpress的事实来创建一个wordpress多站点。我经历了很多问题,最后放弃了多站点想法。因为许多插件不支持多站点。第7点表示您已替换wp-includeswp-admin手动输入文字。我很确定您浏览了每个文件并手动进行了替换。那是因为您错过了一些有用的便捷软件。例如,您可以尝试使用grepwin,这会使这项工作变得更容易
Giri

4

如果您试图隐藏由于饼干而使用wordpress的功能,那么您确实有很多工作要做。如果执行wp *技巧,那么wp-content和wp-includes呢?如果您无法触及这些页面,那么您将被打断页面,这看起来会很恐怖。

另外,Wordpress中有很多东西,确实需要一些工作-安装升级后,您很可能必须再次做很多事情。(因为Apache中的一些重定向无法解决问题)

如果您只是想让所有人都看不到它,那么您当然应该可以默默地做到这一点。

您是否已阅读“强化Wordpress”指南?如果没有,您应该检查一下:http : //codex.wordpress.org/Hardening_WordPress 它为您可以做的很多事情做了很好的介绍。

另外,如果您急于隐藏使用Wordpress的事实,为什么要使用它?


1. Re:wp-content / wp-includes 请参阅文章 2中的链接。我已经阅读了强化的WordPress指南。3.通过阅读我发布的链接可以轻松回答您的最后一个问题。我并不想太粗鲁,但是这个问题与我自己问题的技术优点无关。许多人使用不同的工具,但不希望广告。对于某些人来说,这是业务决策。
Avery Chan

0

尝试在apache配置中进行配置。这可以是包含文件,例如/etc/wordpress/htaccess。这将允许您使用Directory配置指令。但是,您将需要重新启动apache才能加载更改。如果您不希望服务中断,请使用正常重启。

要用.htaccess文件限制目录访问,它们必须位于适当的目录中。它们的功能很像Directory配置指令的内容。您可能需要.htaccess在apache配置中启用所需的选项。这种方法的效率不如在apache配置中使用命令那样高效,因为它需要经常重新解析。


我正在寻找不需要编辑httpd.conf文件的解决方案,因为它可以覆盖(我在虚拟专用主机上)。我将适当地编辑问题。
艾利·陈

@Avry:您需要将要放置在<Directory>配置中的指令放在.htaccess匹配目录中的文件中。注意:如果可能,Apache建议您使用配置。使用版本控制来防止覆盖。
BillThor 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.