在不执行完整的HTTP GET的情况下检测WordPress URL?

时间:2012-06-07 作者:Jeff Atwood

我想写一个单打套路,给WordPress博客条目特殊的待遇。因此,在内容中给定一个简单、未经修饰的URL,例如

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

如何检测这是WordPress安装,ideally without doing a full HTTP GET on every URL I see?

我们可以从WordPress URL开始,当然有一些常见的约定,这至少可以消除一些URL的争用。在这种情况下,它是。。。

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

但这也不是一个普适常数。

我尝试使用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标题?

6 个回复
SO网友:Rarst

根据我的经验和快速代码搜索,WP在标题中没有刻意识别自己的方式。然而,有一些看起来很明显,不太可能是定制的。

前往/wp-login.php 将包含以下内容。组织安装:

 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安装在子目录中且仅限于子目录,而根本不用于管理站点的根目录,则唯一无法可靠检测到的场景。

SO网友:fuxia

发送HEAD 请求收件人/wp-feed.php 在与相同的目录中/xmlrpc.php (即使在子目录安装中)。在WordPress中,您将获得Location 标题作为包含字符串的响应feed.

在您的示例中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\'. 因此,我的建议不是防弹的。

相关:Steps to Take to Hide the Fact a Site is Using WordPress?

SO网友:Nick

将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黑客复活节彩蛋!)

如果您按照301重定向到wordpress。com博客,您将得到以下结果:

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.
注意“Link”标题包含http://wp.me/ URL,这似乎是所有wordpress所共有的。com托管的博客,可以用来识别它们。

我相信这是可行的,因为?page_id=-1 在URL中,将覆盖URL段中的默认路由。不会有ID为-1的页面,因此会提供404/重定向。

SO网友:Munim

wp super cache在所有wordpress安装上都不可用,URL中也没有任何固定格式。虽然permalinks设置页面确实为可以使用的URL方案提供了一些固定设置,但任何人都可以使用任何自定义URL方案。例如,如果任何人决定在URL中只使用页面/帖子名称,那么或多或少都无法确定它是否是Wordpress网站。

xmlrpc的存在可用于检测,但也可以禁用它。

最后,即使您对URL进行了完整的获取,仍然无法百分之百地检测页面是否是使用wordpress构建的。这完全取决于主题模板及其开发方式。

一种相当可靠的方法是查找wp login和wp admin的存在。但即使是这些也可以移动。尽管如此,我还是会选择这种方式。

SO网友:Wyck

除了注释之外,还有两种选择,请设置您自己的WordPress标题。把这个放到你的主题函数中。php。

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

header(\'Type: WordPress\');
}
WP scan fingerprinter(ruby),它通过几个步骤来尝试找出WordPress是否正在使用,例如查找插件目录、主题名称、元标记、自述文件等(我不知道这到底有多准确)。http://code.google.com/p/wpscan/source/browse/#svn%2Ftrunk%2Flib%2Fwpscan

SO网友:Mehulved

将head请求发送到其中一个以前缀wp-开头的文件如何。理想的情况是查看wp登录。php。如果存在,则表示该网站正在运行WordPress。

结束

相关推荐

Encoding Method for URLs?

WordPress是否有一种编码URL的方法或API,类似于在URL中使用标题时生成部分URL的方式?我正在编写一个生成URL的插件,并希望使用与其他所有插件相同的方法。例如,我在标题中键入“这是我的博客文章”,然后生成“这是我的博客文章”。