Я пытаюсь написать подпрограмму oneboxing, которая дает особый подход к записям в блоге WordPress. Так, учитывая простой, неукрашенный URL в содержании, например,
http://blog.stackoverflow.com/2011/03/a-new-name-for-stack-overflow-with-surprise-ending/
Как бы я обнаружил, что это установка WordPress, в идеале без полного HTTP GET для каждого URL, который я вижу?
Конечно, есть общие соглашения для WordPress URL, с которых мы могли бы начать, что исключает по крайней мере некоторые URL из конкуренции. В этом случае это ...
Но это тоже не универсальная константа.
Я попытался просмотреть заголовки этого URL с помощью HTTP HEAD , и я вижу:
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:18340
Content-Type:text/html; charset=UTF-8
Date:Thu, 07 Jun 2012 07:07:38 GMT
Keep-Alive:timeout=15, max=100
Server:Apache/2.2.9 (Ubuntu) DAV/2 PHP/5.2.6-2ubuntu4.2 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g
Vary:Cookie,Accept-Encoding
WP-Super-Cache:Served legacy cache file
X-Pingback:http://blog.stackoverflow.com/xmlrpc.php
X-Powered-By:PHP/5.2.6-2ubuntu4.2
Я не думаю, что полагаться на наличие WP-Super-Cache
было бы особенно надежно, и это единственное, что я вижу в заголовках, которые могли бы помочь, так что, может быть, в установке WordPress нет общих HTTP-заголовков?
Ответы:
Исходя из моего опыта и быстрого поиска кода, нет преднамеренных способов, которыми WP идентифицирует себя в заголовках. Однако есть некоторые, которые кажутся достаточно отличными и вряд ли будут настроены.
HEAD to
/wp-login.php
будет содержать следующее для установки .org:И для .com:
Имя файла cookie настраивается путем определения
TEST_COOKIE
константы, ноWP Cookie check
строка жестко кодируется в ядре, а такжеset_cookie()
вызывается для этого в источнике файла.Для определения местоположения
wp-login.php
есть несколько ярлыков URL (реализованоwp_redirect_admin_locations()
начиная с WP 3.4 (см. Тикет # 19607 ):/login
на корень сайта302
перенаправитьwp-login.php
, где бы он ни находился .Таким образом, единственный сценарий, который не может быть надежно обнаружен, если WP установлен в поддиректории и ограничен ею, вообще не используется для управления корнем сайта.
источник
Отправьте
HEAD
запрос/wp-feed.php
в тот же каталог, что и/xmlrpc.php
(даже в установках подкаталогов). В WordPress вы получитеLocation
заголовок в качестве ответа, содержащий строкуfeed
.В вашем примере
blog.stackoverflow.com
вы получите:Само по себе существование файла
xmlrpc.php
недостаточно безопасно. Любой может дать это имя файлу.Предостережение:
X-Pingback
заголовок может быть отключен путем фильтрации'wp_headers'
. Так что мое предложение не пуленепробиваемое.Связанный: Шаги, чтобы скрыть тот факт, что сайт использует WordPress?
источник
X-Pingback:http://example.com/xmlrpc.php
в заголовке достаточно сильный сигнал, чтобы предположить, что это блог WP?xmlrpc.php
всегда находится в одном каталогеwp-feed.php
.wp-feed.php
лучше.Добавьте URL-адрес
?page_id=-1
и выполните для этого HTTP- запрос HEAD .На самостоятельно установленных блогах WordPress это приведет к ответу 404.
В блогах wordpress.com это приведет к ответу 301 (который в итоге будет равен 200, если вы выполните перенаправление).
На сайтах, отличных от WordPress, вы должны получить ответ 200 (при условии, что исходный URL без строки запроса дал вам 200) - строка запроса не должна иметь никакого значения.
Пример с запросом HEAD для
http://blog.stackoverflow.com/2011/03/a-new-name-for-stack-overflow-with-surprise-ending/?page_id=-1
:Пример с запросом HEAD для
http://dailycrave.wordpress.com/2012/06/01/three-cheese-grilled-pizza/?page_id=-1
(отключить перенаправление):(Обратите внимание на пасхальное яйцо X-Hacker!)
Если вы будете следовать редиректу 301 для блога wordpress.com, вы получите следующее:
Обратите внимание на заголовок «Ссылка», содержащий
http://wp.me/
URL-адрес, который, по-видимому, является общим для всех блогов wordpress.com и может использоваться для их идентификации.Я считаю, что это работает, потому что передача
?page_id=-1
URL переопределяет маршрутизацию по умолчанию из сегментов URL. Не будет страницы с идентификатором -1, и вместо этого будет использоваться перенаправление 404 /.источник
page_id
переменную. Любой метод обнаружения с использованием заголовков, вероятно, может быть подделан, поэтому я не думаю, что это стоит слишком беспокоиться об этом. Что просто оставляет ложные срабатывания для пользовательских CMS. Я не мог придумать более специфичную для WordPress переменную, которая с меньшей вероятностью будет использоваться в других местах. Есть один?Ни wp-super-cache не доступен во всех установках WordPress, ни фиксированный формат в URL-адресах. Хотя на странице настроек постоянных ссылок есть некоторые фиксированные настройки для схем URL, которые можно использовать, любой может просто использовать любую схему URL. Например, если кто-то просто решит использовать в URL-адресе только имя страницы / публикации, выяснить, является ли это веб-сайтом Wordpress, более или менее невозможно.
Наличие xmlrpc можно использовать для обнаружения, но опять же, это можно отключить.
И, наконец, даже если вы ввели полный URL-адрес, все еще невозможно на 100% определить, была ли страница построена с использованием WordPress. Все зависит от шаблона темы и от того, как он разрабатывается.
Одним из достаточно надежных способов является поиск присутствия wp-login и wp-admin. Но даже они также могут быть перемещены. Я бы пошел по этому пути, хотя.
источник
Две альтернативы комментариям, установите свой собственный заголовок WordPress. Оставьте это в functions.php вашей темы.
Сканирование отпечатка пальца WP (ruby), он проходит через несколько шагов, чтобы попытаться выяснить, используется ли WordPress, такой как поиск каталога плагинов, имени темы, мета-тегов, readme и т. Д. (Я понятия не имею, насколько это точно ). http://code.google.com/p/wpscan/source/browse/#svn%2Ftrunk%2Flib%2Fwpscan
источник
Как насчет отправки заголовка запроса в один из файлов, начинающийся с префикса wp-. В идеале посмотрите wp-login.php. Если он существует, это означает, что веб-сайт работает под управлением WordPress.
источник
wp-login.php
может быть расположен в подпапке.