提高WordPress站点安全性|不让别人知道你使用的是WordPress系统

提高WordPress站点安全性|不让别人知道你使用的是WordPress系统

前言:

出于保密和安全方面的原因,一些用户会考虑把网站所用的后台隐藏起来,这中需求有一个收费插件叫hide my wp,如果你没有办法购买,或者不想使用插件,这篇文章就是为你准备的。本文中的方法适合有一定动手能力的用户使用。下面我们就来看看怎么一步一步地把WordPress隐藏掉。

URL 重定向

WordPress的目录结构是最具特色的,如果不经过处理,别人通过代码一眼就能看出来你的网站是用的WordPress,我们首先需要做的就是修改掉WordPress的目录结构。

  1. /**
  2.  * URL 重定向
  3.  *
  4.  * 重定向:
  5.  *  /wp-content/themes/themename/assets/css/ 到/assets/css/
  6.  *  /wp-content/themes/themename/assets/js/ 到/assets/js/
  7.  *  /wp-content/themes/themename/assets/img/ 到/assets/img/
  8.  *  /wp-content/plugins/ to /plugins/
  9.  */
  10. function nowp_add_rewrites($content) {
  11.     global $wp_rewrite;
  12.     $nowp_new_non_wp_rules = array(
  13.         ‘assets/(.*)’ => THEME_PATH . ‘/assets/$1‘,
  14.         ‘plugins/(.*)’   => RELATIVE_PLUGIN_PATH . ‘/$1
  15.     );
  16.     $wp_rewrite->non_wp_rules = array_merge($wp_rewrite->non_wp_rules, $nowp_new_non_wp_rules);
  17.     return $content;
  18. }
  19. function nowp_clean_urls($content) {
  20.     if (strpos($content, RELATIVE_PLUGIN_PATH) > 0) {
  21.         return str_replace(‘/’ . RELATIVE_PLUGIN_PATH,  ‘/plugins’, $content);
  22.     } else {
  23.         return str_replace(‘/’ . THEME_PATH, $content);
  24.     }
  25. }
  26. //不重写多站点和自主体
  27. if ( !is_multisite() && !is_child_theme() ) {
  28.     add_action(‘generate_rewrite_rules’, ‘nowp_add_rewrites’);
  29.     if ( !is_admin() ) {
  30.         $tags = array(
  31.             ‘plugins_url’,
  32.             ‘bloginfo’,
  33.             ‘stylesheet_directory_uri’,
  34.             ‘template_directory_uri’,
  35.             ‘script_loader_src’,
  36.             ‘style_loader_src’
  37.         );
  38.         add_filters($tags, ‘nowp_clean_urls’);
  39.     }
  40. }

以上代码假设在你的主题中有/assets/文件夹,如果你使用的是apache服务器,WordPress会自动为你重建好重写需要的.htacces文件,如果你使用的是nginx,还需要手动添加重写规则到你的主机配置文件中。

  1. location ~ ^/assets/(img|js|css|fonts)/(.*)$ {
  2.   try_files $uri $uri/ /wp-content/themes/YOURTHEME/$1/$2;
  3. }
  4. location ~ ^/plugins/(.*)$ {
  5.   try_files $uri $uri/ /wp-content/plugins/$1;
  6. }

上面的规则硬编码了/wp-content/目录,如果你在主题中修改了WP_CONTENT_URL或WP_CONTENT_DIR常量,可能会出现冲突,确保以上代码中的wp-content目录是正确的就可以了。

使用相对链接

所有的地方都使用绝对链接也是WordPress的一大特点,其实这是没有必要的,我们通过下面的代码可以吧绝对链接修改成为相对链接。

  1. /**
  2.  * 修改绝对链接为相对链接
  3.  *
  4.  * 提取自Roots主题
  5.  */
  6. function nowp_root_relative_url($input) {
  7.     preg_match(‘|https?://([^/]+)(/.*)|i’, $input, $matches);
  8.     if (isset($matches[1]) && isset($matches[2]) && $matches[1] === $_SERVER[‘SERVER_NAME’]) {
  9.         return wp_make_link_relative($input);
  10.     } else {
  11.         return $input;
  12.     }
  13. }
  14. function nowp_enable_root_relative_urls() {
  15.     return !( is_admin() || in_array($GLOBALS[‘pagenow’], array(‘wp-login.php’, ‘wp-register.php’)) );
  16. }
  17. $root_rel_filters = array(
  18.     ‘bloginfo_url’,
  19.     ‘the_permalink’,
  20.     ‘wp_list_pages’,
  21.     ‘wp_list_categories’,
  22.     ‘the_content_more_link’,
  23.     ‘the_tags’,
  24.     ‘get_pagenum_link’,
  25.     ‘get_comment_link’,
  26.     ‘month_link’,
  27.     ‘day_link’,
  28.     ‘year_link’,
  29.     ‘tag_link’,
  30.     ‘the_author_posts_link’,
  31.     ‘script_loader_src’,
  32.     ‘style_loader_src’
  33. );
  34. add_filters($root_rel_filters, ‘nowp_root_relative_url’);

清理HTML Head中没用的代码

WordPress在<head>中添加了很多我们平时用不到的代码,这不但增加了垃圾代码,对网站后台系统也暴露得很充分,好在我们可以很容易的清理掉这些代码,添加以上代码到主题的functions.php文件中即可。

  1. /**
  2.  * 清理wp_head()
  3.  *
  4.  * 移除不需要的 <link>’s
  5.  * Remove inline CSS used by Recent Comments widget
  6.  * Remove inline CSS used by posts with galleries
  7.  * Remove self-closing tag and change ”s to “‘s on rel_canonical()
  8.  */
  9. function nowp_head_cleanup() {
  10.     // Remove junk from head
  11.     remove_action(‘wp_head’, ‘rsd_link’);
  12.     remove_action(‘wp_head’, ‘wp_generator’);
  13.     remove_action(‘wp_head’, ‘feed_links’, 2);
  14.     remove_action(‘wp_head’, ‘index_rel_link’);
  15.     remove_action(‘wp_head’, ‘wlwmanifest_link’);
  16.     remove_action(‘wp_head’, ‘feed_links_extra’, 3);
  17.     remove_action(‘wp_head’, ‘start_post_rel_link’, 10, 0);
  18.     remove_action(‘wp_head’, ‘parent_post_rel_link’, 10, 0);
  19.     remove_action(‘wp_head’, ‘adjacent_posts_rel_link’, 10, 0);
  20.     remove_action(‘wp_head’, ‘adjacent_posts_rel_link_wp_head’, 10, 0);
  21.     remove_action(‘wp_head’, ‘wp_shortlink_wp_head’, 10, 0);
  22.     remove_action(‘wp_head’, ‘feed_links’, 2);
  23.     remove_action(‘wp_head’, ‘feed_links_extra’, 3);
  24.     global $wp_widget_factory;
  25.     remove_action(‘wp_head’, array($wp_widget_factory->widgets[‘WP_Widget_Recent_Comments’], ‘recent_comments_style’));
  26.     if (!class_exists(‘WPSEO_Frontend’)) {
  27.         remove_action(‘wp_head’, ‘rel_canonical’);
  28.         add_action(‘wp_head’, ‘nowp_rel_canonical’);
  29.     }
  30. }
  31. function nowp_rel_canonical() {
  32.     global $wp_the_query;
  33.     if (!is_singular()) {
  34.         return;
  35.     }
  36.     if (!$id = $wp_the_query->get_queried_object_id()) {
  37.         return;
  38.     }
  39.     $link = get_permalink($id);
  40.     echo “\t<link rel=\“canonical\” href=\”$link\”>\n”;
  41. }
  42. add_action(‘init’, ‘nowp_head_cleanup’);
  43. /**
  44.  * Remove the WordPress version
  45.  */
  46. add_filter(‘the_generator’, ‘__return_false’);
  47. /**
  48.  * Clean up language_attributes() used in <html> tag
  49.  *
  50.  * Change lang=”en-US” to lang=”en”
  51.  * Remove dir=”ltr”
  52.  */
  53. function nowp_language_attributes() {
  54.     $attributes = array();
  55.     $output = ;
  56.     if (function_exists(‘is_rtl’)) {
  57.         if (is_rtl() == ‘rtl’) {
  58.             $attributes[] = ‘dir=“rtl”‘;
  59.         }
  60.     }
  61.     $lang = get_bloginfo(‘language’);
  62.     if ($lang && $lang !== ‘en-US’) {
  63.         $attributes[] = “lang=\”$lang\””;
  64.     } else {
  65.         $attributes[] = ‘lang=“en”‘;
  66.     }
  67.     $output = implode(‘ ‘, $attributes);
  68.     $output = apply_filters(‘nowp_language_attributes’, $output);
  69.     return $output;
  70. }
  71. add_filter(‘language_attributes’, ‘nowp_language_attributes’);

写在后面:

以上操作可以隐藏绝大多数的WordPress信息,大大提高WordPress的安全性,虽然高手还能通过一些手段看得出来,但是比什么都不做还是要好多了。

本文参考于 https://www.wpzhiku.com/how-to-hide-that-your-site-is-using-wordpress/  ,若有任何来源问题,请联系QQ:1516677079 及时更正。

最有意思的设计站点


最好的UI素材库

我们极力推荐: