我有一个网站,对于我们正在使用WordPress的事实,我们会尽量保持谨慎。我们可以采取哪些步骤使其不那么明显?
编辑-重要安全说明:
请理解,按照Mark的回答,完美地做到这一点是不可能的,因此请勿将其作为安全措施。
我有一个网站,对于我们正在使用WordPress的事实,我们会尽量保持谨慎。我们可以采取哪些步骤使其不那么明显?
请理解,按照Mark的回答,完美地做到这一点是不可能的,因此请勿将其作为安全措施。
Answers:
<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 » Feed" href="http://example.com/feed/" />
<link rel="alternate" type="application/rss+xml" title="Example Blog » 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');
这将需要使用主题或插件使用的每个脚本来完成。
register_theme_directory()
,我认为将主题目录隐藏在“ wp-content”目录中非常好。
经常遗漏的一点- readme.html
在WordPress根目录中删除。它不仅将安装标识为WP,而且具有准确的版本。并且不要忘记重复更新。
我一直使用Roots Theme方法。
但是将其应用于那些ThemeJungle的地方通常会非常头痛。
于是,开始玩WP_CONTENT_*
常量。我认为这是一种不太容易出错的方法,这就是我现在正在工作的方法:
/m
是uploads
文件夹,/t
是themes
文件夹,/t/t
是活动主题文件夹。该站点并不复杂,因此加载的资产很少...
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/uploads
是http://example.com/m
。
取消选中Organize my uploads into...
将使资产URL 无WP外观。
如果该站点是实时站点,则必须在数据库中进行搜索/替换,并且文件必须四处移动。
请参阅Cris_O
此问答中的答案。
请参阅Rarst
此问答中的答案。
与往常一样,ThemeJungle主题可能会提示对该主题进行特定的修改。
像... TimThumb无法正常工作(!!! lol !!!)。
如此众多的高投票答案。好吧,事实是,这几乎是不可能的,即使是不可能,生命也可能太短而无法付出努力。任何促进隐藏WP的步骤的答案都只是浪费时间,并且会误导您以为您隐藏WP(这很荒谬)。
1)问题不是明显的wp-*
url,生成器meta等。棘手的问题是与wordpress相关的模式,而这种模式的本土化系统不会费心实现,例如作者页面,年,月,日页面,使用p = nnn是有效参数,具有带wordpress注释类,结构和链接名称的注释形式,然后是缓存插件和yoast SEO以及可能只有在检查HTML本身时才能看到的许多其他插件的自我推广。
2)还有其他无法计数的方法可以显示WP的存在(您无法击败它):
甚至php响应标头(如我的回答下面的Dan Gayle所指出的)也返回特定的WP标头。
任何人都可以查询数十个根.php文件中的任何一个:site.com/wp-cron.php
或site.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.txt
return status 200
。
还有您(甚至专业人士)无法隐藏的许多其他事物,只会浪费您的时间!
结论
即使您已努力清理表明这是wordpress的所有内容,您也可能需要在每次插件或核心升级后重做或至少重新检查。生命太短暂了。
您可能会误导一些消散者,但您不能向好的检查员隐瞒。如果这样做是一种安全措施,那么盲目地进行安全性将永远是错误的,如果您只是因为羞于使用wordpress,那么让我告诉您一件事-没人在乎,甚至很少有人这样做也不会知道如何自己解决。
您唯一需要关心的是,您将尽可能地保护WP并监视它的定期更新。
您可以在一台服务器上安装WordPress,而仅从另一服务器上抓取您的内容,包括所需的内容。
如果您需要RSS,则必须这样做。
实际上,这就像从代理或CDN提供静态页面一样,但是仅提供您要提供的位。然后,您也可以只使用基于JavaScript的注释系统,例如Disqus。
资源使用率非常低,因为此处服务器上没有用于提供内容的数据库。
您可以创建自定义地址以登录到博客。通过不使用经典的“ myblog.com/wp-admin”路径来访问仪表板, 此页面将帮助您创建隐身登录名,这对于安全措施也很有用。
因此,将wp-admin附加到您博客中的ppl将无法猜测:)
不要忘记,与请求一起发送的许多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的最顶部可能是安全的。
如果您是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无法识别。以下是代码的一些功能:
还有很多..
大多数答案都集中在使页面的源代码中的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>