Ich versuche, eine Oneboxing-Routine zu schreiben, die WordPress-Blogeinträgen eine besondere Behandlung verleiht. Geben Sie also eine einfache, schmucklose URL in den Inhalt ein, wie z
http://blog.stackoverflow.com/2011/03/a-new-name-for-stack-overflow-with-surprise-ending/
Wie erkenne ich, dass dies eine WordPress-Installation ist, idealerweise ohne ein vollständiges HTTP-GET für jede URL, die ich sehe?
Es gibt sicherlich übliche Konventionen für WordPress-URLs, mit denen wir beginnen könnten, wodurch zumindest einige URLs von Konflikten ausgeschlossen werden. In diesem Fall ist es ...
Aber das ist auch keine universelle Konstante.
Ich habe versucht, die Überschriften dieser URL mit HTTP HEAD zu überprüfen und sehe:
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
Ich denke nicht, dass WP-Super-Cache
es besonders zuverlässig wäre , sich auf das Vorhandensein von zu verlassen, und das ist das Einzige, was ich in den Headern sehe, das helfen würde. Vielleicht gibt es also keine gemeinsamen HTTP-Header in einer WordPress-Installation?
Antworten:
Aus meiner Erfahrung und meiner schnellen Codesuche gibt es keine absichtlichen Möglichkeiten, wie sich WP in Headern identifiziert. Es gibt jedoch einige, die deutlich genug erscheinen und wahrscheinlich nicht angepasst werden.
HEAD to
/wp-login.php
wird für .org install Folgendes enthalten:Und für .com:
Der Cookie-Name kann durch Definieren einer
TEST_COOKIE
Konstante angepasst werden. DieWP Cookie check
Zeichenfolge ist jedoch im Kern fest codiert und wird inset_cookie()
der Quelle der Datei aufgerufen.Zum Auffinden
wp-login.php
gibt es einige URL-Verknüpfungen (implementiertwp_redirect_admin_locations()
seit WP 3.4 (siehe Ticket # 19607 ):/login
On Site's Root302
leitet weiterwp-login.php
, wo immer es ist.Das einzige Szenario, das nicht zuverlässig erkannt werden kann, wenn WP in einem Unterverzeichnis installiert und darauf beschränkt ist, ohne dass das Stammverzeichnis der Site verwaltet wird.
quelle
Senden Sie eine
HEAD
Anfrage an/wp-feed.php
dasselbe Verzeichnis wie/xmlrpc.php
(auch bei Installationen in Unterverzeichnissen). In WordPress erhalten Sie eineLocation
Kopfzeile als Antwort mit der Zeichenfolgefeed
.In Ihrem Beispiel für erhalten
blog.stackoverflow.com
Sie:Das bloße Vorhandensein einer Datei
xmlrpc.php
allein ist nicht sicher genug. Jeder kann einer Datei diesen Namen geben.Vorsichtsmaßnahme: Der
X-Pingback
Header kann durch Filtern deaktiviert werden'wp_headers'
. Mein Vorschlag ist also nicht kugelsicher.Verwandte Themen: Schritte zum Ausblenden der Tatsache, dass eine Site WordPress verwendet?
quelle
X-Pingback:http://example.com/xmlrpc.php
ein starkes Signal , im Header zu sehen, dass es sich um ein WP-Blog handelt?xmlrpc.php
befindet sichwp-feed.php
soweit ich sehen kann immer im selben Verzeichnis .wp-feed.php
ist besser.Hängen Sie die URL an
?page_id=-1
und führen Sie dafür eine HTTP-HEAD- Anfrage durch.In selbst installierten WordPress-Blogs führt dies zu einer 404-Antwort.
Auf wordpress.com-Blogs führt dies zu einer 301-Antwort (die bei einer Antwort von 200 endet, wenn Sie der Umleitung folgen).
Auf Nicht-WordPress-Sites sollten Sie eine Antwort von 200 erhalten (vorausgesetzt, die ursprüngliche URL ohne die Abfragezeichenfolge hat 200 ergeben) - die Abfragezeichenfolge sollte keinen Unterschied machen.
Beispiel mit einer HEAD- Anfrage für
http://blog.stackoverflow.com/2011/03/a-new-name-for-stack-overflow-with-surprise-ending/?page_id=-1
:Beispiel mit einer HEAD- Anfrage für
http://dailycrave.wordpress.com/2012/06/01/three-cheese-grilled-pizza/?page_id=-1
(Follow Redirects deaktiviert):(Beachten Sie das X-Hacker Osterei!)
Wenn Sie der 301-Umleitung für das Blog von wordpress.com folgen, erhalten Sie Folgendes:
Beachten Sie den "Link" -Header mit der
http://wp.me/
URL, die allen von wordpress.com gehosteten Blogs gemeinsam zu sein scheint und zur Identifizierung dieser Blogs verwendet werden könnte.Ich glaube, dass dies funktioniert, weil die Übergabe
?page_id=-1
der URL das Standardrouting aus den URL-Segmenten überschreibt. Es gibt keine Seite mit der ID -1, daher wird stattdessen eine 404 / -Umleitung bereitgestellt.quelle
page_id
Variable bereits verwenden. Jede Art von Erkennungsmethode, die Header verwendet, kann möglicherweise gefälscht werden, daher halte ich es nicht für wert, sich darüber Sorgen zu machen. Das hinterlässt nur Fehlalarme für benutzerdefiniertes CMS. Ich konnte mir keine WordPress-spezifischere Variable vorstellen, die mit geringerer Wahrscheinlichkeit woanders verwendet werden würde. Ist dort eines?Weder ist wp-super-cache in allen WordPress-Installationen verfügbar, noch gibt es ein festes Format in den URLs. Während die Seite mit den Einstellungen für Permalinks einige feste Einstellungen für URL-Schemata enthält, kann jeder Benutzer einfach ein benutzerdefiniertes URL-Schema verwenden. Wenn zum Beispiel jemand nur den Namen der Seite / des Beitrags in der URL verwendet, ist es mehr oder weniger unmöglich herauszufinden, ob es sich um eine Wordpress-Website handelt.
Das Vorhandensein von xmlrpc kann zur Erkennung verwendet werden, dies kann jedoch ebenfalls deaktiviert werden.
Und selbst wenn Sie die URL vollständig abrufen, ist es immer noch nicht zu 100% möglich, festzustellen, ob die Seite mit WordPress erstellt wurde. Es hängt alles von der Themenvorlage und ihrer Entwicklung ab.
Ein ziemlich zuverlässiger Weg ist, nach wp-login und wp-admin zu suchen. Aber auch diese könnten verschoben werden. Ich würde diesen Weg gehen.
quelle
Zwei Alternativen zu den Kommentaren, setzen Sie Ihren eigenen WordPress-Header. Lege dies in die functions.php deines Themas.
Beim WP-Scan-Fingerabdruck (Ruby) werden mehrere Schritte ausgeführt, um herauszufinden, ob WordPress verwendet wird, z. B. das Plugin-Verzeichnis, der Themenname, die Meta-Tags, die Readme-Datei usw. (ich habe keine Ahnung, wie genau dies tatsächlich ist) ). http://code.google.com/p/wpscan/source/browse/#svn%2Ftrunk%2Flib%2Fwpscan
quelle
Wie wäre es, wenn Sie eine Kopfanforderung an eine der Dateien senden, die mit dem Präfix wp- beginnen. Im Idealfall schauen Sie sich wp-login.php an. Wenn es existiert, bedeutet dies, dass auf der Website WordPress ausgeführt wird.
quelle
wp-login.php
könnte sich in einem Unterordner befinden.