我有一个网站,我们要谨慎对待我们使用WordPress的事实。

编辑-重要的安全说明:

请注意,按照Mark的回答,完全做到这一点是不可能的,所以不要依靠它作为安全措施。

评论

为什么要隐藏使用Wordpress的功能?

@Wadih:因为有人告诉我

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

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

在许多站点上使用WordPress已有六年时间,无论如何都不会有人相信您。 ;-)

#1 楼

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

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必须位于theme根目录中)。您将需要创建一个备用CSS,然后从头开始调用它。 WordPress不需要您使用主题style.css,它仅要求将其放在主题目录中。



直接从header.php
<中删除br />
<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" /> 


要删除这些多余的链接,您可以向函数添加过滤器。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-09-08 17:02

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

– John P Bloch
2010-09-08 20:28

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

– MikeSchinkel
2010年9月9日,0:44

@MikeSchinkel:对于wp-admin和wp-includes,您可以通过apache访问控制来完成一些工作,以便使其他用户和管理员之间不存在那些路径,例如导致标准404。

– hakre
2010年9月9日下午1:59

@Chris_O:结帐register_theme_directory(),我认为将主题目录隐藏在“ wp-content”目录之外非常好。

– hakre
2010-09-10 16:50



#2 楼

经常遗漏的一点-删除WordPress根目录中的readme.html。它不仅将安装标识为WP,而且具有准确的版本。并且不要忘记重复更新。

相关问题:禁止访问或自动删除readme.html,license.txt,wp-config-sample.php

评论


好一点-也可以使用.htaccess始终拒绝对readme.html的访问,因此您不必担心再次删除它。

–蒂姆·马隆(Tim Malone)
15年4月28日在0:57

...另请参阅wordpress.stackexchange.com/a/201805/13561

–弗兰克·诺克(Frank Nocke)
2015年9月6日下午6:50

#3 楼

我一直使用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 Blackbourn1,Mike Little2和Otto3足以建议您:


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/uploads,而是http://example.com/m
取消选中Organize my uploads into...将使资产URL外观无WP。 br />如果站点是活动的,则必须在数据库中进行搜索/替换,并且文件必须四处移动。


插头和头部内容

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


Readme.html

请参阅问题解答中的Rarst答案。


其他步骤

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

评论


抱歉,ThemeForest似乎已采取步骤解决此问题。并有一些不错的帮助之手!

–brasofilo
2012年10月8日13:22

#4 楼

唯一有效的答案是:不可能

这么多高票通过....时间来刷新纪录。
事实是,这实际上是不可能的,即使是这样,生命可能太短暂,无法投入精力。任何能促进隐藏WP步骤的答案都只是浪费时间,并且会误导您以为您隐藏WP(这很荒谬)。

1)问题不是显而易见的wp-*网址,生成器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内,它很容易找到<div class="entry-content post-14"...等元素/ css类(这直接表明使用的结构是WP)
在页面HTML内,您将很容易看到uploads文件夹,即使您重命名进行硬编码后,日期部分(例如uploads/2018/05/image.jpg(甚至image-315x225.jpg))就显示了典型的WP结构。
由于现在许多站点都是使用MultiSite构建的,因此它在链接中使用了/site/2 ...
ping任何插件/主题自述文件(都包含在内),例如plugin-name/readme.txt,返回状态200
您(甚至专业人员)无法隐藏许多很多东西,只会浪费您天!


结论

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

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

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

评论


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

–T.Todua
18-10-13在17:56



当然,去吧。

–马克·卡普伦
18-10-14在0:02

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

– Remzi Cavdar
18-10-24在18:18

#5 楼

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

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

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

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

评论


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

– MikeSchinkel
10-10-24在7:27

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

– AndyBeard
2010-10-24 14:56



#6 楼

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

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

评论


链接已过期且插件已删除。

– kaiser
2012-02-22 17:49

@kaiser:Internet存档Wayback机器拥有它(而且,甚至还有zip);)

–brasofilo
2012年7月15日在17:08

@brasofilo只是为了更好地覆盖它-这是一个“未过期”的pastebin。 :)

– kaiser
2012年7月15日在17:15

@kaiser brasofilo-谢谢大家对回答的后续意见:)我也坚持这样做

– mireille raad
12年7月16日在11:09

#7 楼

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

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

#8 楼

不要忘记,与您的请求一起发送的许多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的最顶部可能是安全的。

#9 楼

如果您是php和mod_rewrite的新手,这可能很难实现。我建议您查看我的回复部分。或自己尝试,您可以使用类似的方法隐藏wp-content / plugins路径结构:对于其他结构使用类似的内容,可能需要一些高级重写,有关其他mod_rewrite信息,请参见http://httpd.apache.org/docs/current/mod/mod_rewrite.html。开箱即用,有几个不错的插件,一些商业的,也可以在WordPress仓库免费获得,我建议尝试WP Hide&Security Enhancer。这包括很多内容,并有助于更改几乎所有内容,从而使WordPress无法识别。以下是代码的一些功能:


自定义管理员Url
自定义管理员Url
阻止默认Admin Url
阻止任何直接文件夹访问以完全隐藏结构
自定义wp-login.php文件名
阻止默认wp-login.php
阻止默认wp-signup.php
阻止XML-RPC API
新XML -RPC路径
可调主题URL
新子主题URL
更改主题样式文件名
自定义wp-include
阻止默认wp-include路径
阻止defalt wp-content
自定义插件的网址
单个插件的网址更改
阻止默认插件的路径
新上传的URL
阻止默认的上传URL
删除wordpress版本
Meta Generator块
删除表情符号和必需的javascript代码
删除pingback标记
删除wlwmanifest Meta删除wpemoji

/>还有更多..

#10 楼

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

#11 楼

大多数答案都集中在使页面源代码中的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,该API可让您操作标头。如果您在此过程中添加动作的时间足够晚,则可以使用此接口通过插件删除所有标头设置。最后,您可以使用.htaccess标头接口来拦截WP正在进行的任何操作。例如,可以通过包含以下行来阻止发送任何Link标头:

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


#12 楼

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

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

评论


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

– Zaaose
2010年9月8日在16:46

#13 楼

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

示例:

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