Кроки, які потрібно зробити, щоб приховати факт, на якому веб-сайт використовує WordPress?


142

У мене є веб-сайт, для якого ми намагаємось бути розбірливим щодо того, що ми використовуємо WordPress. Які кроки ми можемо зробити, щоб зробити його менш очевидним?

EDIT - Важлива примітка щодо безпеки:

Будь ласка, розумійте, що зробити це ідеально неможливо відповідно до відповіді Марка , тому не покладайтеся на це як на міру безпеки.


7
Чому ви хочете приховати, що використовуєте Wordpress?
Вадіх М.

15
@Wadih: Тому що мені сказали
Casebash

5
Це безпека через невідомість. Якщо вони дійсно хочуть, хтось може співвіднести поведінку поколінь сторінок і довести, що вона працює на Wordpress.
Wadih M.

28
@Wadih M. - "Безпека з боку нехтування" - не єдина причина цього. Один з моїх клієнтів хоче те саме, але вони хочуть, тому що вони хочуть продати розміщені послуги клієнтам, які вважають, що "чорт, вони просто використовують WordPress". Тож це гра в брендинг / сприйняття, а не безпека, принаймні для мого клієнта.
MikeSchinkel

2
Шість років на багатьох сайтах використовується WordPress, ніхто все одно не вірить вам. ;-)
cjbj

Відповіді:


128

Найбільші подарунки WordPress - між <head> </head>тегами.

Приклад WordPress головного вмісту, виведеного за темою Twentyten, і як видалити:

<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" /> 

Щоб видалити ці додаткові посилання, ви можете додати фільтр до function.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-вмісту у вашому файлі wp-config.php, але у вас можуть виникнути проблеми, якщо ваша тема або будь-які додатки не використовують належний метод для виклику файлів.

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, SEO все в одному, W3-Total-Cache, Super Cache та багато інших, додають коментарі до виводу HTML. Більшість їх легко змінити, щоб видалити коментарі, але ваші зміни будуть перезаписані, коли плагіни оновлюються.

wp-включає

Каталог wp-include містить jquery та різні інші js-файли, до яких теми або плагіни будуть викликатись за допомогою wp_enqueue_script (). Щоб змінити це, вам потрібно скасувати реєстрацію сценаріїв WordPress за замовчуванням та зареєструвати нове місцеположення. Додати в функции.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 або all-in-one-seo, то це все ще досить мертвий подарунок того, хто знає, що шукає.
MikeSchinkel

@MikeSchinkel Правда, але в той же час, так само wp-включає в себе і wp-admin; за винятком того, що ви не можете змінити жодне з них, а також не можете їх приховати, не обмежуючи функціональність сайту.
Джон П Блох

@John P Bloch: Безумовно, однак я б цього не сказав, але сказав би і . :)
MikeSchinkel

3
@MikeSchinkel : для wp-admin та wp- include ви можете робити деякі речі через контроль доступу apache, щоб зробити ці шляхи неіснуючими для інших користувачів, ніж адміністратор, наприклад, ведучи до стандарту 404.
hakre

@Chris_O: Оформити замовлення register_theme_directory(), я думаю, що це чудово сховати тему dir від каталогу "wp-content".
хакре

45

Один біт, який часто пропускають - видалити readme.htmlв корені WordPress. Він не тільки визначає установку як WP, але також має точну версію. І не забудьте повторити оновлення.

Пов'язане запитання: Запобігати доступу або автоматично видаляти readme.html, licence.txt, wp-config-sample.php


5
Добрий момент - також можна використовувати ваш .htaccess, щоб завжди заборонити доступ до readme.html, тому вам не доведеться турбуватися про його видалення знову.
Тім Малоун


21

Я завжди використовував метод Тема коріння .
Але застосовуючи його до тих, що є ThemeJungle , зазвичай є великий головний біль.

Отже, почав грати з WP_CONTENT_*константами. Я вважаю, що це набагато менш схильний до помилок метод, і це те, що я працюю зараз:

вікно активності сафарі
/m- це uploadsпапка, /t- це themesпапка та /t/tактивна папка теми. Сайт не складний, тому мало завантажених активів ...


WP_CONTENTLESS

wp-config.php

Налаштування wp-contentна root ( /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-хакерах] - якісь недоліки в налаштуванні WP_CONTENT_DIR (і URL) на DOCUMENT_ROOT? , де Джон Блекборн 1 , Майк Літл 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.
Якщо зняти прапорець, URL-адреси активів Organize my uploads into...відобразять WPless .
Якщо сайт в реальному часі, пошук / заміну потрібно зробити в базі даних, а файли потрібно перемістити.
завантажує налаштування папки


Плагіни та вміст голови

Див Cris_OВідповідь в цьому Q & A.


Readme.html

Див RarstВідповідь в цьому Q & A.


Інші кроки

Як завжди, теми ThemeJungle можуть підказувати конкретні хаки в темі.
Як ... TimThumb не працює (!!! lol !!!).



13

Єдина правильна відповідь: НЕМОЖЛИВИЙ

Стільки високовідповідальних відповідей .... час, щоб встановити рекорд. Ну, правда полягає в тому, що це практично неможливо, і навіть якщо воно є, життя, ймовірно, занадто коротке, щоб докласти зусиль для цього. Будь-яка відповідь, яка сприяє крокам, щоб приховати WP, - це лише марна трата вашого часу і введе вас в оману, думаючи, що ви ховаєте свою WP (це абсурдно).

1) Проблема полягає не в очевидних wp-*URL-адресах, мета-генераторі і т. Д. Важкі проблеми пов'язані з моделями, пов'язаними з wordpress, що система, яка вирощується вдома, не буде намагатися реалізовувати, як сторінки авторів, рік, місяць, дні, використовуйте p = nnn як дійсний параметр, майте форму коментарів із класом коментарів wordpress, назвами структури та посилань, а потім відбувається самореклама плагінів кешування та yoast SEO та, ймовірно, багатьох інших плагінів, які ви бачите лише під час огляду самого HTML.

2) Є й інші незлічені методи, які показують існування WP (і ви не можете цього перемогти):

  • Навіть заголовок відповіді php (як зазначив Дан Гейл нижче моєї відповіді) повертає конкретний заголовок WP.

  • Будь-хто може просто запитувати будь-який із десятків кореневих .php файлів: site.com/wp-cron.phpабо site.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, він використовує тобто /site/2в посиланнях ...

  • ping до будь-яких модулів читання тем (усі вони містять), наприклад plugin-name/readme.txt, повернення статусу 200.

  • і багато, багато, багато інших речей, які ви (або навіть професіонали) не зможете приховати і просто витратите свої дні!


висновок

І навіть якщо ви докладете зусиль для очищення всього, що вказує на те, що це Wordpress, вам може знадобитися повторно або принаймні повторно перевірити після кожного оновлення плагіну чи ядра. Життя просто занадто коротке для цього.

Ви можете ввести в оману деяких дилерантів, але ви не можете сховатися від хорошого інспектора. Якщо це робиться як міра безпеки, то це безпека через невідомість, яка завжди помиляється, і якщо ви просто соромтеся використовувати WordPress, то дозвольте мені сказати вам щось - нікого не хвилює, і навіть дуже мало хто з них, мабуть, не буде знайте, як це самі зрозуміти.

Єдине, що вам слід подбати - це захистити WP наскільки це можливо та стежити за регулярними оновленнями.


Єдина правильна відповідь, я хотів опублікувати цю. Я спростував усі інші відповіді, оскільки вони просто вводять в оману, витрачаючи час на те, щоб досягти неможливої ​​і нісенітниці. Якщо ви дозволите мені, я додам 2 центи у вашій відповіді.
Т.Тодуа

звичайно, йти вперед.
Марк Каплун

Я також проголосував за це. Це витрачає час, ховаючи wp лише для безпеки від невідомості. Це не тільки не працюватиме, але й потенційно може порушити функціональність, зроблену неправильно.
Ремзі Кавдар

10

Ви можете мати WordPress на одному сервері і викреслювати свій вміст з іншого, включаючи необхідний вміст.

Якщо вам потрібен RSS, вам доведеться зробити те саме з цим.

Ефективно це було б як подання статичних сторінок з проксі-сервера або CDN, але тільки біти, які ви хочете подавати. Тоді ви також можете просто використовувати систему коментарів на основі javascript, наприклад Disqus.

Дійсно низьке використання ресурсів, тому що тут немає баз даних на сервері, що обслуговує вміст.


@AndyBeard - Це дуже цікава ідея, але вона потребує багато часу на розробку, щоб отримати щось реалізоване. Або ви знаєте проект з відкритим кодом, де хтось це вже робив?
MikeSchinkel

4
Ось одне рішення wordpress.org/extend/plugins/really-static - є кілька інших
AndyBeard

7

Ви можете створити свою власну адресу для входу у свій блог. Якщо не використовувати класичний шлях "myblog.com/wp-admin", щоб потрапити на панель приладів. Ця сторінка допоможе вам створити незаконні входи, це також добре для заходів безпеки.

Тож ppl, який додає wp-admin до вашого блогу, не зможе здогадатися :)


Посилання застаріло, а плагін видалено.
кайзер

2
@kaiser: у " Архіву Інтернету" у Wayback Machine є (і, що дивно, навіть поштовий індекс);)
brasofilo


1
@kaiser brasofilo - спасибі хлопець на наступний на відповідь :) я тримаю це , а також
Мірей Raad

5

Крім перерахованого вище, вам потрібно заблокувати доступ до різних wp*файлів і каталогів. Якщо хтось хотів побачити, чи не працює ви WP, він міг би здогадатися, чи є у вас, wp-settings.phpчи можуть вони отримати доступ до якогось каталогу. Повернення 403 недостатньо, оскільки воно повідомляє користувачеві, що ресурс існує; вони просто не мають до нього доступу.

Я не фахівець з апашшю, тому я задав це питання на сервері за замовчуванням.


3

Не забувайте, що багато інформації заголовка 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

Цього важко домогтися, якщо ви новачок у php та mod_rewrite. Я пропоную вам перевірити розділ моєї відповіді. Або спробуйте самі, ви можете використовувати щось подібне, щоб приховати структуру шляху wp-content / plugins:

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

Це змінить шлях до / модулів. Використовуйте щось подібне для іншої структури, можливо, вам знадобляться деякі вдосконалені переписування, див. Http://httpd.apache.org/docs/current/mod/mod_rewrite.html для додаткової інформації про mod_rewrite.

Якщо ви віддаєте перевагу щось із коробки, є кілька приємних плагінів, кілька комерційних, також безкоштовних у сховищі WordPress, я пропоную спробувати WP Hide & Security Enhancer . Сюди входить багато речей і допоможе змінити майже все, щоб зробити ваш WordPress невпізнанним. Ось деякі функції коду:

  • Спеціальна URL-адреса адміністратора
  • Спеціальна URL-адреса адміністратора
  • Блокувати URL-адресу адміністратора за замовчуванням
  • Заблокуйте будь-який прямий доступ до папки, щоб повністю приховати структуру
  • Спеціальне ім'я файлу wp-login.php
  • Блокуйте wp-login.php за замовчуванням
  • Блокуйте wp-signup.php за замовчуванням
  • Блокувати API XML-RPC
  • Новий шлях XML-RPC
  • Регульована URL-адреса теми
  • URL-адреса нової дитини
  • Зміна назви файлу стилю теми
  • Спеціальні WP-включення
  • Блокуйте за замовчуванням шляхи включення wp
  • Блокувати дефалт wp-вмісту
  • Спеціальні URL-адреси плагінів
  • Зміна URL-адреси індивідуального плагіна
  • Блокуйте шляхи плагінів за замовчуванням
  • Нова URL-адреса завантаження
  • Блокувати URL-адреси завантаження за замовчуванням
  • Видаліть версію WordPress
  • Блок метагенератора
  • Вимкніть смайли та необхідний код JavaScript
  • Видаліть тег pingback
  • Видаліть wlwmanifest Meta
  • Видаліть rsd_link Meta
  • Видаліть wpemoji

та багато іншого..


2

Я не хочу повторювати параметри кодування, оскільки вони були вичерпно охоплені, інший варіант, який я знаю, що працює, використовуючи плагін, який приховує wp. Раніше я використовував цей плагін для задоволення стандартів. Це називається приховати мій WordPress.


2

Більшість відповідей зосереджені на затемненні WordPress у вихідному коді сторінки, але ще до цього WP вже віддав себе у заголовку http стандартної установки. Просто спробуйте свій власний сайт на такому веб- сайті, як web-sniffer (прикиньтесь IE 6 і запитайте заголовка http 1.0), і ви побачите, що серед повернень є:

<http://www.example.com/wp-json/>; rel="https://api.w.org/"

Останнє - посилання на API Wordpress.org . Він існує з моменту включення API REST в WP 4.4. Ви можете видалити його за допомогою цього рядка прямо на початку вашого functions.php:

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

Багато плагінів, як-от Jetpack для його коротких посилань, також можуть вставляти посилання у заголовку http. Вони можуть це зробити, оскільки WP має HTTP API , який дозволяє маніпулювати заголовками. Ви можете використовувати цей інтерфейс, щоб видалити всі параметри заголовка за допомогою плагінів, якщо ви додасте дію досить пізно в процесі.

Нарешті, ви можете використовувати інтерфейс заголовка .htaccess, щоб перехопити все, що робить WP. Наприклад, ви можете запобігти надсиланню будь-яких заголовків посилань, включивши цей рядок:

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

0

Ви можете налаштувати тему, щоб виключити всю інформацію WordPress. Також видаліть мета-віджет та будь-який віджет, який виводить інформацію про платформу.

Особисто я вважаю за краще висловити свою подяку, показавши, що використовую WordPress.


17
Вдячність є приємною, але вона не відповідає основного питання.
ZaMoose

-1

Ви можете використовувати плагін WPS Hide Login .
Ви входите в WordPress за допомогою wp-admin. Але ви можете змінити wp-adminналаштування за допомогою цього плагіна.

Приклад:

Перед: http://example.com/wp-admin
Після: http://example.com/custom-text-to-login

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.