it-swarm.cn

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

我有一个网站,我们正试图谨慎对待我们使用WordPress这一事实。我们可以采取哪些措施使其不那么明显?

编辑 - 重要安全说明:

请理解,按照Mark的 回答 完成这样做是不可能的,所以不要依赖于此作为安全措施。

141
Casebash

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

由Twentyten主题输出的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必须位于主题根目录中)。您需要创建一个备用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');

_ plugins _

请注意,一些插件,如Akismat,All in One SEO,W3-Total-Cache,Super Cache等等,都会为HTML输出添加注释。大多数都很容易修改以删除注释,但您的更改将在插件更新时被覆盖。

wp-includes

Wp-includes目录包含jquery和各种其他js文件,主题或插件将使用wp_enqueue_script()调用。要更改此设置,您需要取消注册默认的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');

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

126
Chris_O

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

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

45
Rarst

我一直使用 Roots Theme方法
但是把它应用到ThemeJungle那里通常会有一个很大的问题。

所以,开始使用WP_CONTENT_*常量。我认为这是一种不易出错的方法,这就是我现在所做的工作:

safari activity window
/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,迈克小2 和奥托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...将为资产网址提供WPless外观。
如果网站是实时的,则必须在数据库中进行搜索/替换,并且必须移动文件。
uploads folder settings


插件和头部内容

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


的Readme.html

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


其他步骤

像往常一样,ThemeJungle主题可能会提示主题中的特定黑客。
喜欢...... TimThumb 不工作(!!! lol !!!)。

21
brasofilo

唯一有效的答案:不可能

如此多的高投票答案......时间创下纪录。嗯,事实是它实际上是不可能的,即使它是,生命可能太短,不能投入其中。任何答案,促进隐藏WP的步骤只是浪费你的时间,并会误导你认为你隐藏你的WP(这是荒谬的)。

1)问题不在于明显的wp-*网址,生成器元等。硬问题是与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内部,很容易找到元素/ css类,比如<div class="entry-content post-14"...或者等(这是使用结构的直接提示是WP)

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

  • 现在很多站点都是使用MultiSite构建的,它在链接中使用ie /site/2 ...

  • ping任何插件/主题自述文件(所有这些都包含),如plugin-name/readme.txt,返回状态200

  • 你(甚至是专业人士)将无法隐藏的许多很多其他东西会浪费你的时间!


结论

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

你可能会误导一些愚蠢的人,但你不能躲避一个好的检查员。如果这是作为一种安全措施完成的话,那就是默默无闻的安全,这总是错误的,如果你只是对使用wordpress感到羞耻,那么让我告诉你一件事 - 没有人关心,甚至很少有人可能不会知道如何自己解决这个问题。

你唯一应该关心的是你尽可能地保护WP并监控它的定期更新。

12
Mark Kaplun

您可以在一台服务器上安装WordPress,只扫描其他内容,包括您需要的内容。

如果你需要RSS,你必须对此做同样的事情。

实际上,它就像从代理或CDN提供静态页面,但只提供您想要提供的位。然后你也可以使用基于javascript的评论系统,例如Disqus。

资源使用率非常低,因为服务器上的服务器上没有数据库。

10
AndyBeard

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

那么将wp-admin附加到你的博客上的人将无法猜到:)

7
mireille raad

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

我不是Apache专家所以我问 这个问题 over serverfault。

5
Avery Chan

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

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

这将改变/ modules的路径。对于其他结构使用类似的东西,您可能需要一些高级重写,请参阅 http://httpd.Apache.org/docs/current/mod/mod_rewrite.html 获取其他mod_rewrite信息。

如果喜欢开箱即用的东西,很少有Nice插件,一些商业,也可以免费在WordPress存储库,我建议尝试 WP Hide&Security Enhancer 。这包括很多东西,并帮助改变几乎所有东西,使你的WordPress无法识别。以下是代码的一些功能:

  • 自定义管理员网址
  • 自定义管理员网址
  • 阻止默认管理员网址
  • 阻止任何直接文件夹访问以完全隐藏结构
  • 自定义wp-login.php文件名
  • 阻止默认wp-login.php
  • 阻止默认wp-signup.php
  • 阻止XML-RPC API
  • 新的XML-RPC路径
  • 可调节的主题网址
  • 新的儿童主题网址
  • 更改主题样式文件名
  • 自定义wp-include
  • 阻止默认的wp-include路径
  • 阻止wp内容
  • 自定义插件网址
  • 个人插件网址更改
  • 阻止默认插件路径
  • 新上传网址
  • 阻止默认上传网址
  • 删除wordpress版本
  • 元发生器块
  • 将表情符号和所需的javascript代码分开
  • 删除pingback标记
  • 删除wlwmanifest Meta
  • 删除rsd_link Meta
  • 删除wpemoji

还有很多..

3
WP-Silver

不要忘记,随请求一起发送的很多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/en/function.header-remove.php

在内容被推出之前删除已知的PHP标题。我无法确定在哪里放置这个(也许其他人可以使用该信息),但是在将任何内容发送到浏览器之前将它放在index.php的最顶端可能是安全的。

3
Dan Gayle

大多数答案专注于在页面的源代码中隐藏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 AP​​I包含在WP 4.4中,所以它就在那里。你可以在functions.php的开头用这一行删除它:

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

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

最后,您可以使用 .htaccess header interface 来拦截WP正在做的任何事情。例如,您可以通过包含以下行来阻止发送任何链接标头:

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

我不想重复编码选项,因为它们已被彻底覆盖,我知道另一个选项是使用隐藏wp的插件。我之前使用过这个插件就达到了令人满意的标准。它叫做隐藏我的WordPress。

2
NJENGAH

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

就个人而言,我更愿意通过展示我使用WordPress来表达我的感激之情。

0
James