![如何通过 htaccess 隐藏我的 Wordpress 安装?](https://linux22.com/image/552889/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20htaccess%20%E9%9A%90%E8%97%8F%E6%88%91%E7%9A%84%20Wordpress%20%E5%AE%89%E8%A3%85%EF%BC%9F.png)
(我知道不建议通过隐秘性来实现安全性)。
我试图隐藏我正在使用 Wordpress 的事实。这邮政有帮助,但它只解决了内容问题(某种程度上)。我希望发生以下情况:
wp*
用户尝试通过浏览器访问任何带有子字符串的 URL 。结果:重定向至 404 页面。
博客用户/管理员知道为了登录他们应该前往
http://example.com/blogin/
。结果:apache 将它们重定向到
http://example.com/wp-admin/
。如果用户尝试直接
wp-admin
从浏览器访问,他们会被发送到#1。结果:重定向至 404 页面。
我迄今所做的事情
wp*
我注意到,对于默认安装的 WordPress,我可以访问WP 安装的(相对)根目录中的任何文件。具体来说wp-settings.php
,这是有问题的,因为它泄露了我的设置信息。如果用户访问它,它会发出一些 PHP 错误并显示部分目录结构。我编辑了我的 php.ini 文件以关闭此功能display_errors
。现在访问http://example.com/wp-settngs.php
会出现一个空白页。这本身并不理想,因为它表明
wp-settings.php
存在。事实上,访问所有不同的wp*
文件是可能的(结果不同)。然后我将以下内容放入我的 htaccess 文件中:RewriteEngine On RewriteBase / RewriteCond %{PATH_INFO} wp* [NC] RewriteRule .* - [F]
效果很好!任何带有 的内容
wp*
都会被路由到我的自定义 404 页面。但现在我无法访问我的管理页面。我尝试将这一行插入到上面的代码中:
RewriteRule ^blogin wp-admin [NC,R,L]
。它应该就在后面,RewriteBase
但是没有起作用。我尝试做了一个:
<Directory /home/example/wp*> Order Allow, Deny Allow from example.com Deny from all </Directory>
希望来自我网站的 referer(通过重写规则)能够访问 wp-admin,但外部用户则不能。这也行不通。apache 抱怨您无法从 htaccess 使用此指令。
我已经阅读了 apache 文档;从理论上讲,我理解这些概念,但我需要一些实际的帮助。
编辑:我正在寻找使用 .htaccess 而不是 httpd.conf 的解决方案,因为我的特定设置使得使用 httpd.conf 不一致。
答案1
TLDR;仅使用 .htaccess 文件中的指令是不可能掩盖 WordPress 的。
现在,一个悲惨而恐怖的故事出现了。我们的朋友 fbh 说的没错,隐藏 WordPress 很困难,胆小鬼可不能轻易得逞。啊!以下是这次(不幸)冒险的详情。请注意!
动机
我是那种喜欢完美事物的人。我会浪费时间过度设计某些东西,以达到“正确的方式”。我不喜欢默认 WordPress 设置的一个原因是,用户可以输入http://ex.com/wp-settings.php然后所有这些 php 术语就会到处喷涌而出。我最终能够通过 PHP 关闭错误,但这导致我更希望只让那些自以为是的东西成为可从服务器定位的资源……而其他一切都将在我们的自定义搜索页面上 404/3 化。之后,我想到我想完全隐藏底层框架(即 WP)……无论如何……如果你想隐藏 WP,这是可能的。但这真的很难。
走向毁灭的步骤
适当修改您的 PHP ini 设置。(即关闭显示错误)您可能认为这没有必要,因为如果我们使用 .htaccess 来重新路由,人们将看不到错误,因为他们无法访问导致错误的资源(我正在看着你
wp-settings.php
)。但错误可能会出现在显示的页面中,因此您肯定希望关闭它们。仅仅因为WP_*
设置了指令并不一定意味着事情会按照您认为的方式运行。我发现在我的服务器上,我必须首先将 display_errors 设置为 false,因为 WP_DISPLAY_ERRORS 假定默认设置为 false。控制 PHP ini 设置可能很简单,只需在 .htaccess 文件中放入一个指令即可。或者,就我而言,可能很复杂,只需创建一个 CGI 处理程序,然后将 php.ini 文件放在那里即可。具体情况取决于您的设置。
删除对带有前缀的文件/目录的所有访问权限
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]
学习如何穿越魔多通过删除所有访问权限,
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 状态。删除 wp-content Wordpress.stackexchange有一篇关于删除 wp-content 的很棒的文章。您必须重新定义一些 WP 常量,而且这样做基本可行。您还必须将所有访问从
wp-content
“whatever-content”重定向。如果这是一次干净的部署,这可能不会成为问题。如果您要修改预先存在的部署,则必须做一些额外的工作。将 URL 重写为 wp-content选修的
RewriteRule (.*)(wp-content)(.*) $1whatever-content$3 [NC,R,L]
。这会进入您的 .htaccess 文件。如果您的用户尝试通过 URL 访问一些旧内容wp-content
,它将被重定向到这里。在你的数据库中 Grep 并替换所有对 wp-content 的引用选修的。您的数据库中仍有
wp-content
。如果您想免费使用 WP,则需要摆脱那些东西。我导出/mysql 转储了我的数据库,对字符串进行了搜索并将字符串替换wp-content
为新字符串。您可能会说...如果 apache 会重写我的 URL,为什么我必须这样做?问题是源代码将包含这些引用,因此如果您真的对隐藏 WordPress 感兴趣,您需要这样做。注意:此时我应该停下来,接受这个行不通的现实。但我希望 T 先生可怜我。替换源中所有对
wp-includes
和的引用。wp-admin
WordPress 的许多功能都依赖于这两个目录:wp-includes
和wp-admin
。这意味着这些目录名称在源代码中是硬编码的。这意味着您必须创建新目录(因为 PHP 使用底层 OS 文件系统,而不是 apache)才能访问这些目录,然后将它们写入发出的 html。这实在是太麻烦了。我很快就放弃了,去卫生间大便。
课
当然,我也可以读http://codex.wordpress.org/Hardening_WordPress并按照这些步骤操作。但我想要一个完美的网站。现在我只想把那些时间都找回来。阻止我停下来的最大原因是我没有在互联网上看到任何关于这项工作需要大量工作且几乎不可能完成的文章。相反,我读到有人试图这样做,却不知道他们是否成功。所以,对于过去的自己,我将通过 Apple 的 Time Machine 将此发送给他,请不要试图掩盖 WordPress。这不值得。
答案2
如果您试图隐藏您使用 wordpress 是因为黑客的缘故,那么您确实需要做一些工作。如果您使用 wp* 技巧,那么 wp-content 和 wp-includes 怎么办?如果无法访问它们,您将破坏页面,看起来会很糟糕。
此外,Wordpress 中有很多东西,这确实需要一些工作 - 而且在安装升级时,您很可能必须再次做很多工作。(因为 Apache 中的几个重定向不会起作用)
如果您只是想将其隐藏起来不让大家知道,那么您当然应该能够以某种方式通过隐晦的方式来做到这一点。
你读过“强化 Wordpress”指南吗?如果没有,你应该看看:https://wordpress.org/support/article/hardening-wordpress/它对您可以做的很多事情进行了很好的介绍。
另外,如果您如此急于隐藏您使用 Wordpress 的事实,那为什么要使用它呢?
答案3
尝试在 apache 配置中进行配置。这可以是类似 的文件包含/etc/wordpress/htaccess
。这将允许您使用Directory
配置指令。但是,您需要重新启动 apache 才能加载更改。如果您不希望服务中断,请使用正常重启。
要限制文件对.htaccess
目录的访问,它们需要位于适当的目录中。它们的作用与Directory
配置指令的内容非常相似。您可能需要.htaccess
在 apache 配置中启用所需的选项。此方法不如在 apache 配置中使用命令那么高效,因为它需要频繁重新解析。