问题描述

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

最佳解决方案

最大的 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 它只需要它在主题目录。

 

直接从 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,超级缓存等许多插件会向 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://googleajax.admincdn.com/ajax/libs/jquery/1.4.2/jquery.min.js', false, '1.3.2');
        wp_enqueue_script('jquery');
    }
}
add_action('init', 'my_init');

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

次佳解决方案

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

相关问题:Prevent access or auto-delete readme.html, license.txt, wp-config-sample.php

第三种解决方案

我一直使用 Roots Theme method 。但是,将它应用于那些 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] – Any drawbacks in setting WP_CONTENT_DIR (and URL) to DOCUMENT_ROOT? 中询问过,John Blackbourn1,Mike Little2 和 Otto3 对此提出建议:

1
I’ve had this structure active on a site for the last 18
months and haven’t seen any problems. As with any change to the
location of the content directory, you’ll need to double check any
plugins you add to the site don’t assume that the content directory is
at wp-content.

2
There are discussions around the net the $_SERVER['DOCUMENT_ROOT'] may be
susceptible to hacking. In which case this is extremely dangerous because
there are lots of places that require() or include() WP_CONTENT_DIR .
‘something’;

3
There are cases where the content in $_SERVER can be perfectly safe,
but for security purposes, it is better to always treat it as
untrusted data. For this specific case, hardcode the directory.


新的主题文件夹

 /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://googleajax.admincdn.com/ajax/libs/jquery/1.7.1/jquery.min.js', false, '1.7.1' );
        wp_register_script( 'swfobject', 'https://googleajax.admincdn.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 一个无 WPF 的外观。如果站点是实时的,则必须在数据库中进行搜索/替换,并且必须移动文件。


插件和头部内容

请参阅本 Q& A 中的 Cris_O 答案。


Readme.html

请参阅本 Q& A 中的 Rarst 答案。


其他步骤

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

第四种方案

您可以在一个服务器上使用 WordPress,并从另一个服务器上删除内容,只包括您需要的内容。

如果您需要 RSS,您将不得不这样做。

有效地,它就像从代理或 CDN 提供静态页面,但只是要提供的位。然后,您也可以使用基于 javascript 的评论系统,如 Disqus 。

真正的资源使用不足,因为这里服务于内容的服务器上没有数据库。

第五种方案

您可以创建自定义地址登录到您的博客。通过不使用经典的 「myblog.com/wp-admin」 路径来访问您的仪表板 This page 将帮助您创建隐身登录,这对安全措施也是有好处的。

所以 ppl 谁将 wp-admin 附加到你的博客,将无法猜到:)

第六种方案

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

我不是 apache 的专家,所以我问 this question 在 serverfault 上。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。