隐藏网站使用WordPress的事实的步骤?


142

我有一个网站,对于我们正在使用WordPress的事实,我们会尽量保持谨慎。我们可以采取哪些步骤使其不那么明显?

编辑-重要安全说明:

请理解,按照Mark的回答,完美地做到这一点是不可能的,因此请勿将其作为安全措施。


7
为什么要隐藏使用Wordpress的内容?
Wadih M.

15
@Wadih:因为有人告诉我
Casebash 2010年

5
默默无闻就是安全。如果他们确实需要,那么有人可以关联页面生成的行为,并证明它正在wordpress引擎上运行。
Wadih M.

28
@Wadih M. - “通过隐匿安全”是不是这个的唯一原因。我的一位客户想要相同的东西,但他们想要它,因为他们希望能够将其托管服务卖给那些如果他们认为“哎呀,他们只是在使用WordPress”而愿意付出高昂费用的客户因此,至少对于我的客户而言,这是一种品牌/感知游戏,而不是安全性游戏。
MikeSchinkel 2010年

2
在许多站点上使用WordPress已有六年时间,反正没人会相信您。;-)
cjbj

Answers:


128

<head> </head>标记之间最大的WordPress赠品。

The Twentyten Theme输出的示例WordPress标题内容以及如何删除:

<link rel="profile" href="http://gmpg.org/xfn/11" /> 

直接从header.php中删除

 <link rel="stylesheet" type="text/css" media="all" href="http://example.com/wp-content/themes/twentyten/style.css" /> 

通过从另一个位置调用样式表来隐藏WordPress,并更改wp-content目录。WordPress要求您的主题在style.css的顶部包含一些基本信息(style.css必须位于themes根目录中)。您将需要创建替代CSS并从头开始调用它。WordPress不需要您使用主题style.css,仅要求它位于themes目录中。

直接从header.php中删除

<link rel="alternate" type="application/rss+xml" title="Example Blog &raquo; Feed" href="http://example.com/feed/" /> 
<link rel="alternate" type="application/rss+xml" title="Example Blog &raquo; Comments Feed" href="http://example.com/comments/feed/" />    
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://example.com/xmlrpc.php?rsd" /> 
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://example.com/wp-includes/wlwmanifest.xml" /> 
<link rel='index' title='Example Blog' href='http://example.com/' /> 
<meta name="generator" content="WordPress 3.1-alpha" /> 

要删除这些额外的链接,您可以将过滤器添加到functions.php

// remove junk from head
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'feed_links', 2);
remove_action('wp_head', 'index_rel_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'feed_links_extra', 3);
remove_action('wp_head', 'start_post_rel_link', 10, 0);
remove_action('wp_head', 'parent_post_rel_link', 10, 0);
remove_action('wp_head', 'adjacent_posts_rel_link', 10, 0);

您可以在wp-config.php文件中更改插件目录和wp-content目录,但是如果主题或任何插件未使用正确的方法来调用文件,则可能会遇到一些问题。

define( 'WP_CONTENT_DIR', $_SERVER['DOCUMENT_ROOT'] . '/new-wp-content' );

将WP_CONTENT_URL设置为该目录的完整URI(不带斜杠),例如

define( 'WP_CONTENT_URL', 'http://example/new-wp-content');

可选将WP_PLUGIN_DIR设置为该目录的完整本地路径(不带斜杠),例如

define( 'WP_PLUGIN_DIR', $_SERVER['DOCUMENT_ROOT'] . '/new-wp-content/new-plugins' );

将WP_PLUGIN_URL设置为该目录的完整URI(不带斜杠),例如

define( 'WP_PLUGIN_URL', 'http://example/new-wp-content/new-plugins');

插件

请注意,有些插件如Akismat,All in One SEO,W3-Total-Cache,Super Cache和许多其他插件会在HTML输出中添加注释。大多数插件很容易修改以删除注释,但是只要插件更新,您的更改就会被覆盖。

wp-includes

wp-includes目录包含jquery和其他主题或插件将使用wp_enqueue_script()调用的其他js文件。要更改此设置,您将需要注销默认的WordPress脚本并注册新位置。添加到functions.php:

function my_init() {
    if (!is_admin()) {
        // comment out the next two lines to load the local copy of jQuery
        wp_deregister_script('jquery');
        wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js', false, '1.3.2');
        wp_enqueue_script('jquery');
    }
}
add_action('init', 'my_init');

这将需要使用主题或插件使用的每个脚本来完成。


Chris_O:好答案!您可能还应该补充一点,如果它们使用插件或主题,则其中许多很容易识别;例如,如果有人使用akismet插件或多合一搜索引擎优化,那么知道自己在寻找什么的人仍然是很死的礼物。
MikeSchinkel 2010年

@MikeSchinkel是的,但是同时,wp-includes和wp-admin也是如此;但是您不能更改其中任何一个,也不能在不限制网站功能的情况下隐藏它们。
John P Bloch 2010年

@John P Bloch:当然,但是我不会说,但是,我会说。:)
MikeSchinkel 2010年

3
@MikeSchinkel:为WP-admin和WP-包括您可以通过Apache访问控制做一些东西,这样做不存在其他用户的路径则admin,如导致标准404
hakre

@Chris_O: Checkout register_theme_directory(),我认为将主题目录隐藏在“ wp-content”目录中非常好。
hakre 2010年


21

我一直使用Roots Theme方法
但是将其应用于那些ThemeJungle的地方通常会非常头痛。

于是,开始玩WP_CONTENT_*常量。我认为这是一种不太容易出错的方法,这就是我现在正在工作的方法:

野生动物园活动窗口
/muploads文件夹,/tthemes文件夹,/t/t是活动主题文件夹。该站点并不复杂,因此加载的资产很少...


WP_CONTENTLESS

wp-config.php

设置wp-content为网站的根目录(/public_html/)。

/** 
 Inside WP_CONTENT, the following folders should exist: 
 /languages , /mu-plugins , /plugins , /themes , /upgrade , /uploads  

 The WP_CONTENT_* definitions bellow REMOVE the existence of the /wp-content folder 
 and makes its contents reside in the ROOT of your site

 UTTERMOST attention is necessary when doing file maintenance activities in the server (i.e.: WP upgrades, new Webmaster...), 
 as the Themes and Plugins folders are meant to be renamed to /t and /p (serious candidates for unthoughful removal)

 PLEASE note:
 - we change the Plugins folder in WP_PLUGIN_* definitions
 - the Themes folder is changed by a MustUse Plugin 
   (/mu-plugins/set-extra-themes-folder.php)
 - the Uploads folder is changed in WordPress settings page 
   (http://example.com/wp-admin/options-media.php)
 - the hardcode path to be used in WP_CONTENT_DIR and WP_PLUGIN_DIR can be checked using an action inside the set-extra-themes-folder Plugin (check the comments in this file)
*/
define( 'WP_CONTENT_DIR', '/www/htdocs/username/public_html' );
define( 'WP_CONTENT_URL', 'http://www.example.com' );

define( 'WP_PLUGIN_DIR', '/www/htdocs/username/public_html/p' );
define( 'WP_PLUGIN_URL', 'http://www.example.com/p' );

我曾在[wp-hackers]中问过这个问题-将WP_CONTENT_DIR(和URL)设置为DOCUMENT_ROOT时有任何缺点吗?,其中John Blackbourn 1,Mike Little 2和Otto 3都可以建议:

1
在过去的18个月中,我一直在一个站点上使用这种结构,但是没有发现任何问题。与对内容目录的位置所做的任何更改一样,您需要仔细检查添加到站点的所有插件(不假定内容目录位于)wp-content

2
有关网络的讨论$_SERVER['DOCUMENT_ROOT']可能会遭到黑客攻击。在这种情况下,这是极其危险的,因为有很多地方是require()include() WP_CONTENT_DIR。“某物”;

3
在某些情况下,其中的内容$_SERVER可能是完全安全的,但出于安全目的,最好始终将其视为不可信数据。对于这种特定情况,请对目录进行硬编码。


新主题文件夹

/mu-plugins/set-extra-themes-folder.php

由于没有WP_THEMES_*常量,我们需要函数register_theme_directory()来“ 注册包含主题的目录。
试图将额外的目录设置为根,但结果很有趣(即:它不起作用)。

<?php
/*
    Plugin Name: Set Extra Themes Folder
    Version: 1.0
    Description: Allows the directory - http://example.com/t - to be used as an extra theme's directory
    Plugin URI: http://wordpress.stackexchange.com/questions/1507
    Author: brasofilo
    Author URI: http://rodbuaiz.com
*/


/**
 * Remove the comment from the following line to know the correct path to put in register_theme_diretory()
*/
//add_action( 'admin_head', 'brsfl_alert_directory_path' );

function brsfl_alert_directory_path()
{
    echo '<script type="text/javascript">
        alert("Directory: '.$_SERVER['DOCUMENT_ROOT'].'");
    </script>';
}


/**
 * The following will enable the directory "t" to be used as an EXTRA Themes directory
*/
register_theme_directory( '/www/htdocs/username/public_html/t' );


/**
 * De-registering default scripts in wp-includes for CDN ones
*/
add_action('init', 'brsfl_init_scripts');

function brsfl_init_scripts() 
{
    if ( !is_admin() ) 
    {
        wp_deregister_script( 'jquery' );
        wp_deregister_script( 'swfobject' );
        wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', false, '1.7.1' );
        wp_register_script( 'swfobject', 'https://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js', false, null, true );
        wp_enqueue_script( 'jquery' );
        wp_enqueue_script( 'swfobject' );
    }
}

上载文件夹

/wp-admin/options-media.php

取而代之的http://example.com/uploadshttp://example.com/m
取消选中Organize my uploads into...将使资产URL 无WP外观。
如果该站点是实时站点,则必须在数据库中进行搜索/替换,并且文件必须四处移动。
上传文件夹设置


插件和标题内容

请参阅Cris_O此问答中的答案。


Readme.html

请参阅Rarst此问答中的答案。


其他步骤

与往常一样,ThemeJungle主题可能会提示对该主题进行特定的修改。
像... TimThumb无法正常工作(!!! lol !!!)。


1
抱歉,ThemeForest似乎已采取步骤解决此问题。并有一些不错的帮助
brasofilo 2012年

13

唯一有效的答案:不可能

如此众多的高投票答案。好吧,事实是,这几乎是不可能的,即使是不可能,生命也可能太短而无法付出努力。任何促进隐藏WP的步骤的答案都只是浪费时间,并且会误导您以为您隐藏WP(这很荒谬)。

1)问题不是明显的wp-*url,生成器meta等。棘手的问题是与wordpress相关的模式,而这种模式的本土化系统不会费心实现,例如作者页面,年,月,日页面,使用p = nnn是有效参数,具有带wordpress注释类,结构和链接名称的注释形式,然后是缓存插件和yoast SEO以及可能只有在检查HTML本身时才能看到的许多其他插件的自我推广。

2)还有其他无法计数的方法可以显示WP的存在(您无法击败它):

  • 甚至php响应标头(如我的回答下面的Dan Gayle所指出的)也返回特定的WP标头。

  • 任何人都可以查询数十个根.php文件中的任何一个:site.com/wp-cron.phpsite.com/xmlrpc.php(或无法隐藏的等),标题答案将200代替404 not found

  • 任何人都可以检查具有json端点以获得WP特定的答案。

  • 在HTML页面内,许多.css.js文件都有特定的短语,这些短语显然是指WP。

  • 在页面HTML内,可以轻松地找到element / css类,例如<div class="entry-content post-14"...或等(这直接表明所使用的结构是WP的)

  • 在页面HTML内,您将很容易看到该uploads文件夹,或者即使您使用硬编码对其进行了重命名,日期部分uploads/2018/05/image.jpg(例如,甚至image-315x225.jpg)也显示了典型的WP结构。

  • 由于现在许多站点都是使用MultiSite构建的,因此它/site/2在链接中使用了...

  • ping任何插件/主题自述文件(它们都包含在内),例如plugin-name/readme.txtreturn status 200

  • 还有您(甚至专业人士)无法隐藏的许多其他事物,只会浪费您的时间!


结论

即使您已努力清理表明这是wordpress的所有内容,您也可能需要在每次插件或核心升级后重做或至少重新检查。生命太短暂了。

您可能会误导一些消散者,但您不能向好的检查员隐瞒。如果这样做是一种安全措施,那么盲目地进行安全性将永远是错误的,如果您只是因为羞于使用wordpress,那么让我告诉您一件事-没人在乎,甚至很少有人这样做也不会知道如何自己解决。

您唯一需要关心的是,您将尽可能地保护WP并监视它的定期更新。


唯一正确的答案,我想发布那个。我否决了所有其他答案,因为它们只是误导性的,浪费时间的尝试,无法实现不可能的目标。如果您允许我,我将在您的答复内加2美分。
T.Todua '18 -10-13

当然,去吧。
马克·卡普伦

我也投票赞成。出于隐瞒安全性而浪费时间隐藏wp。它不仅不起作用,而且还可能破坏功能做错的地方。
Remzi Cavdar '18

10

您可以在一台服务器上安装WordPress,而仅从另一服务器上抓取您的内容,包括所需的内容。

如果您需要RSS,则必须这样做。

实际上,这就像从代理或CDN提供静态页面一样,但是仅提供您要提供的位。然后,您也可以只使用基于JavaScript的注释系统,例如Disqus。

资源使用率非常低,因为此处服务器上没有用于提供内容的数据库。


@AndyBeard-这是一个非常有趣的想法,但是要使某些东西可行,将需要大量的开发时间。还是您知道有人已经完成了一个开源项目?
MikeSchinkel 2010年

4
这是一个解决方案wordpress.org/extend/plugins/really-static-还有其他一些解决方案
AndyBeard,2010年

7

您可以创建自定义地址以登录到博客。通过不使用经典的“ myblog.com/wp-admin”路径来访问仪表板, 此页面将帮助您创建隐身登录名,这对于安全措施也很有用。

因此,将wp-admin附加到您博客中的ppl将无法猜测:)


链接已过时,插件已删除。
kaiser 2012年

2
@kaiser:互联网档案馆的Wayback机器拥有它(而且甚至还有zip);)
brasofilo 2012年


1
@kaiser brasofilo-谢谢您回答我的问题:)我也保留了这一点
mireille raad 2012年

5

除上述内容外,您还需要锁定对各种wp*文件和目录的访问。如果有人想看看您是否正在运行WP,他们可以猜测您是否拥有WP,wp-settings.php或者他们是否可以访问某些目录。返回403是不够的,因为它告诉用户资源已经存在。他们只是无法访问它。

我不是Apache专家,所以我在serverfault上问了这个问题


3

不要忘记,与请求一起发送的许多http标头信息可以识别您的网站在WordPress上运行。例如,如果您在以下站点上检查标题,则显而易见:

$ curl -I http://www.rollingstones.com/
Server: WP Engine/5.0

$ curl -I http://www.mattcutts.com
X-Powered-By: W3 Total Cache/0.9.1.3

$ curl -I http://blogs.reuters.com/us/
WP-Super-Cache: Served supercache file from PHP

其中一些是由服务器设置的,有些是由插件设置的,所以我没有一种方法可以说如何删除其中的100%,但是如果您使用的是PHP 5.3,则可以使用

header_remove("X-Foo");http://www.php.net/manual/zh/function.header-remove.php

在删除内容之前删除已知的PHP标头。我不能确定将其放置在什么地方(也许其他人可以输入该信息),但是将任何内容发送到浏览器之前,将其放在index.php的最顶部可能是安全的。


3

如果您是php和mod_rewrite的新手,这可能很难实现。我建议您查看我的回复部分。或自己尝试,您可以使用以下方法隐藏wp-content / plugins路径结构:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^modules/(.*) /wp-content/plugins/$1 [L,QSA]
</IfModule>

这将更改/ modules的路径。对于其他结构使用类似的内容,则可能需要一些高级重写,有关其他mod_rewrite信息,请参见http://httpd.apache.org/docs/current/mod/mod_rewrite.html

如果喜欢开箱即用的东西,那么有几个不错的插件,一些商业的,也可以在WordPress仓库免费获得,我建议尝试WP Hide&Security Enhancer。这包括很多内容,并有助于更改几乎所有内容,从而使您的WordPress无法识别。以下是代码的一些功能:

  • 自定义管理员网址
  • 自定义管理员网址
  • 阻止默认管理员网址
  • 阻止任何直接文件夹访问以完全隐藏结构
  • 自定义wp-login.php文件名
  • 阻止默认的wp-login.php
  • 阻止默认wp-signup.php
  • 阻止XML-RPC API
  • 新的XML-RPC路径
  • 可调主题网址
  • 新子主题网址
  • 更改主题样式文件名
  • 自定义wp-include
  • 阻止默认的wp-include路径
  • 阻止Defalt wp-content
  • 自定义插件网址
  • 个别插件网址更改
  • 阻止默认插件路径
  • 新上传网址
  • 阻止默认上传网址
  • 删除WordPress版本
  • 元生成器块
  • 清除表情符号和必需的javascript代码
  • 删除pingback标签
  • 删除wlwmanifest元
  • 删除rsd_link元
  • 删除wpemoji

还有很多..


2

我不想重复编码选项,因为它们已被详尽介绍,我知道可以使用的另一个选项是使用隐藏wp的插件。我已经使用过此插件达到令人满意的标准。它叫“隐藏我的WordPress”。


2

大多数答案都集中在使页面的源代码中的WordPress变得晦涩难懂,但是甚至在该WP之前,它就已经在标准安装的http标头中放弃了它。只需在像web-sniffer(假装为IE 6并要求提供http 1.0标头)之类的网站上尝试自己的网站,您就会看到返回的内容是:

<http://www.example.com/wp-json/>; rel="https://api.w.org/"

后者是Wordpress.org API的链接。自从REST API包含在WP 4.4中以来,就可以使用它。您可以在此行的开头将此行将其删除functions.php

remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 );

许多插件,例如Jetpack的短链接,也可以在http标头中插入链接。他们可以这样做,因为WP具有HTTP API,它允许您处理标头。如果您在此过程中添加动作的时间足够晚,则可以使用此界面通过插件删除所有标头设置。

最后,您可以使用.htaccess标头接口截获WP正在执行的任何操作。例如,您可以通过包含以下行来阻止发送任何Link标头:

<IfModule mod_headers.c>
Header unset Link
</IfModule>

0

您可以自定义主题以排除所有WordPress信息。还要删除元窗口小部件以及任何将输出有关平台信息的窗口小部件。

就个人而言,我更愿意通过显示我正在使用WordPress来表示感谢。


17
感谢是很好的,但不能回答核心问题。
ZaMoose

-1

您可以使用插件WPS隐藏登录
您使用登录到您的wordpress wp-admin。但是您可以wp-admin使用此插件更改为自定义。

例:

之前:http://example.com/wp-admin
之后: http://example.com/custom-text-to-login

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.