完全なHTTP GETを実行せずにWordPress URLを検出しますか?


21

WordPressブログエントリに特別な扱いを与えるワンボックスルーチンを作成しようとしています。したがって、次のようなコンテンツに単純な装飾されていないURLを指定します

http://blog.stackoverflow.com/2011/03/a-new-name-for-stack-overflow-with-surprise-ending/

これがWordPressのインストールであることを理想的にはすべてのURLで完全なHTTP GETを実行せずに検出するにはどうすればよいですか?

確かに、WordPressのURLには共通の慣例があり、競合から少なくとも一部のURLを排除します。この場合は...

http://example.com/year/month/slug-goes-here

しかし、それは普遍的な定数でもありません。

私が使用してその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ヘッダーはないのかもしれない。


明確にするために、.orgのセルフホストインストールのみ、または.comにも興味がありますか?
Rarst

すべてのWordPressインストール-任意のWordPressインストール
ジェフアトウッド

1
関連するRSSフィードページで200を確認できますか?
ケビン・バーク

1
なぜこれが本当に必要なのですか?偽陽性または偽陰性はより悪いですか?Wordpressでページを生成し、すべてのページの静的ダンプを定期的にエクスポートするサイトはどうですか?(例えばthespace.org
rjmunro

回答:


17

私の経験と迅速なコード検索から、WPがヘッダーで自分自身を識別する意図的な方法はありません。ただし、十分に明確でカスタマイズされそうにないものもあります。

HEADに/wp-login.phpは、.orgインストール用に以下が含まれます。

 Set-Cookie: wordpress_test_cookie=WP+Cookie+check; path=/

.comの場合:

Set-Cookie: wordpress_test_cookie=WP+Cookie+check; path=/; domain=.wordpress.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がサブディレクトリにインストールされサブディレクトリに限定されている場合、サイトのルートの管理にまったく使用されていないと、確実に検出できない唯一のシナリオです。


12

(サブディレクトリのインストールでも)と同じディレクトリにHEADリクエストを送信します。WordPressでは、文字列を含む応答としてヘッダーを取得します。/wp-feed.php/xmlrpc.phpLocationfeed

あなたの例ではblog.stackoverflow.comあなたが得るでしょう:

HTTP/1.1 301 Moved Permanently\r\n
Date: Thu, 07 Jun 2012 07:30:10 GMT\r\n
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\r\n
X-Powered-By: PHP/5.2.6-2ubuntu4.2\r\n
Location: http://blog.stackoverflow.com/feed/\r\n
Vary: Accept-Encoding\r\n
Content-Type: text/html; charset=UTF-8\r\n
\r\n

ファイルxmlrpc.phpだけが存在するだけでは十分に安全ではありません。誰でもこの名前をファイルに付けることができます。

警告:X-Pingbackフィルタリングすることでヘッダーを無効にできます'wp_headers'。したがって、私の提案は防弾ではありません。

関連:サイトがWordPressを使用している事実を非表示にする手順


X-Pingback:http://example.com/xmlrpc.phpヘッダーに表示されても、それがWPブログであると想定するほど強力なシグナルではないでしょうか?
ジェフアトウッド

これは「デフォルト」のワードプレスのインストールで機能しますが、サブディレクトリwordpressを実行することもできます。これにより、この方法が損なわれます。
navitronic

1
私が見る限りxmlrpc.php、@ navitronic は常に同じディレクトリwp-feed.phpにあります。
FUXIA

1
X-Pingbackは、WPだけでなく、pingback対応リソースの標準(ish)ヘッダーです。
NickFitz

@NickFitzだから、xmlrpcファイルだけに頼るべきではありません。テストwp-feed.phpが優れています。
FUXIA

6

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

HTTP/1.1 404 Not Found
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
Content-Encoding: gzip
Vary: Cookie,Accept-Encoding
Cache-Control: no-cache, must-revalidate, max-age=0
Last-Modified: Thu, 07 Jun 2012 08:53:01 GMT
Date: Thu, 07 Jun 2012 08:53:01 GMT
Keep-Alive: timeout=15, max=100
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Pragma: no-cache
Connection: Keep-Alive
X-Powered-By: PHP/5.2.6-2ubuntu4.2
X-Pingback: http://blog.stackoverflow.com/xmlrpc.php
Content-Type: text/html; charset=UTF-8

HEADリクエストの例http://dailycrave.wordpress.com/2012/06/01/three-cheese-grilled-pizza/?page_id=-1(リダイレクトをオフにする):

HTTP/1.1 301 Moved Permanently
X-Pingback: http://dailycrave.wordpress.com/xmlrpc.php
Server: nginx
Expires: Wed, 11 Jan 1984 05:00:00 GMT
X-Hacker: If you're reading this, you should visit automattic.com/jobs and apply to join the fun, mention this header.
Location: http://dailycrave.wordpress.com/2012/06/01/three-cheese-grilled-pizza/
Pragma: no-cache
Cache-Control: no-cache, must-revalidate, max-age=60
Connection: close
Last-Modified: Thu, 07 Jun 2012 09:01:09 GMT
Content-Type: text/html; charset=UTF-8
Date: Thu, 07 Jun 2012 09:01:09 GMT

(X-Hackerイースターエッグに注意してください!)

wordpress.comブログの301リダイレクトに従うと、次のようになります。

HTTP/1.1 200 OK
Server: nginx
Vary: Accept-Encoding, Cookie
Last-Modified: Thu, 07 Jun 2012 09:48:26 GMT
Cache-Control: max-age=172, must-revalidate
Connection: close
Date: Thu, 07 Jun 2012 09:50:34 GMT
Transfer-Encoding: Identity
Content-Encoding: gzip
Link: <http://wp.me/pXGqK-27g>; rel=shortlink
X-Pingback: http://dailycrave.wordpress.com/xmlrpc.php
Content-Type: text/html; charset=UTF-8
X-Nananana: Batcache
X-Hacker: If you're reading this, you should visit automattic.com/jobs and apply to join the fun, mention this header.

http://wp.me/URL を含む「リンク」ヘッダーに注意してください。これは、wordpress.comがホストするすべてのブログに共通しているようで、それらを識別するために使用できます。

?page_id=-1URL を渡すと、URLセグメントからのデフォルトのルーティングがオーバーライドされるため、これが機能すると考えています。IDが-1のページは存在しないため、代わりに404 /リダイレクトが提供されます。


2
そのようなURLでリダイレクトまたは404できるサイトがあると思いますが、ここでどのような動作が具体的であり、WPとしてサイトを識別しますか?
9:09にラースト

@Rarstはい-それは警告です。サイトがこれをスプーフィングする可能性があり、page_id既に変数を使用しているものが存在する場合があります。ヘッダーを使用したあらゆる種類の検出方法は、おそらくスプーフィングされる可能性があるため、それについてあまり心配する価値はないと思います。これは、カスタムCMSに対して誤検出を残すだけです。他の場所で使用される可能性が低いWordPress固有の変数については考えられませんでした。あるの?
ニック

3

wp-super-cacheはすべてのwordpressインストールで利用可能ではなく、URLに固定形式もありません。パーマリンク設定ページでは、使用可能なURLスキームの固定設定が提供されていますが、カスタムURLスキームは誰でも使用できます。たとえば、URLでページ/投稿名のみを使用することに決めた場合、それがWordpress Webサイトであるかどうかを判断することはほぼ不可能です。

xmlrpcの存在は検出に使用できますが、これも無効にできます。

最後に、URLを完全に取得しても、WordPressを使用してページが構築されているかどうかを100%検出することはできません。それはすべて、テーマテンプレートとその開発方法に依存します。

かなり信頼できる方法の1つは、wp-loginとwp-adminの存在を探すことです。しかし、これらも動かすことができます。しかし、私はこのように行きます。


1

コメントの2つの代替手段として、独自のWordPressヘッダーを設定します。これをテーマのfunctions.phpにドロップします。

add_action('template_redirect', 'add_wp_header');
function add_wp_header(){

header('Type: WordPress');
}

WPスキャンフィンガープリント(ルビー)、プラグインディレクトリ、テーマ名、メタタグ、readmeなどの検索など、WordPressが使用されているかどうかを確認するためにいくつかの手順を実行します(これが実際にどれだけ正確かはわかりません)。http://code.google.com/p/wpscan/source/browse/#svn%2Ftrunk%2Flib%2Fwpscan


0

プレフィックスwp-で始まるファイルの1つにヘッドリクエストを送信してはどうですか。理想的にはwp-login.phpを見てください。存在する場合は、WebサイトがWordPressを実行していることを意味します。


wp-login.phpサブフォルダーに配置できます。
ユージンマヌイロフ

また、リダイレクトされる可能性があるため、名前を変更できます。
カイザー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.