완전한 HTTP GET을 수행하지 않고 WordPress URL을 감지 하시겠습니까?


21

WordPress 블로그 항목에 특별한 처리를 제공하는 oneboxing 루틴을 작성하려고합니다. 따라서 다음과 같이 콘텐츠에 단순하고 꾸미지 않은 URL이 제공됩니다.

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

내가 보는 모든 URL에서 전체 HTTP GET을 수행하지 않고 WordPress 설치임을 어떻게 감지 합니까?

우리가 시작할 수있는 WordPress URL에 대한 공통된 규칙 이 있으며, 이로 인해 경합에서 적어도 일부 URL이 제거됩니다. 이 경우에는 ...

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

그러나 그것은 보편적 인 상수도 아닙니다.

HTTP HEAD를 사용하여 해당 URL의 헤더를 보려고 시도했는데 다음 과 같습니다.

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 헤더가 0입니까?


명확히하기 위해-.org 자체 호스팅 설치에만 관심이 있습니까 아니면 .com에도 관심이 있습니까?
Rarst

모든 WordPress 설치-모든 WordPress 설치
Jeff Atwood

1
관련 RSS 피드 페이지에서 200을 확인할 수 있습니까?
케빈 버크

1
왜 정확히 이것을 원하십니까? 가양 성 또는가 음성이 악화됩니까? Wordpress에서 페이지를 생성하고 주기적으로 모든 페이지의 정적 덤프를 내보내는 사이트는 어떻습니까? (예 : thespace.org )
rjmunro 2016 년

답변:


17

내 경험과 빠른 코드 검색에서 더이없는 고의적 인 헤더 방식의 WP 식별 자체가. 그러나 충분히 뚜렷해 보이고 사용자 정의되지 않을 수있는 것이 있습니다.

HEAD to /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

쿠키 이름은 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 블로그라고 가정 할 정도로 강력한 신호 가 표시되지 않습니까?
Jeff Atwood

"기본"워드 프레스 설치에서는 작동하지만 이 방법을 손상시키는 하위 디렉토리에서 워드 프레스를 실행할 수도 있습니다 .
navitronic

1
@navitronic xmlrpc.phpwp-feed.php내가 볼 수 있는 한 항상 같은 디렉토리에 있습니다.
fuxia

1
X-Pingback은 WP뿐만 아니라 핑백 가능 리소스의 표준 (ish) 헤더입니다.
NickFitz

@NickFitz xmlrpc 파일에만 의존해서는 안됩니다. 테스트 wp-feed.php가 더 좋습니다.
fuxia

6

URL을 추가하고 HTTP HEAD 요청을 ?page_id=-1수행하십시오 .

자체 설치된 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을 포함하는 "링크"헤더에 주목하십시오. URL은 모든 wordpress.com 호스팅 블로그에 공통적 인 것으로 보이며이를 식별하는 데 사용될 수 있습니다.

?page_id=-1URL을 전달 하면 URL 세그먼트의 기본 라우팅이 재정의 되기 때문에 이것이 효과가 있다고 생각합니다 . ID가 -1 인 페이지가 없으므로 대신 404 / 리디렉션이 제공됩니다.


2
나는 어떤 사이트가 그러한 URL에서 리디렉션 또는 404를 할 수 있다고 생각합니까? 여기서 어떤 행동이 구체적이며 사이트를 WP로 식별합니까?
Rarst

@Rarst 예-이것이 바로 경고입니다. 사이트가이를 스푸핑 할 수 있으며 page_id이미 변수 를 사용하는 사이트가있을 수 있습니다 . 헤더를 사용하는 모든 종류의 탐지 방법은 스푸핑 될 수 있으므로 너무 걱정할 가치가 있다고 생각하지 않습니다. 사용자 지정 CMS에 대해 오 탐지를 남겨 둡니다. 다른 곳에서는 사용하기 쉽지 않은 WordPress 관련 변수를 생각할 수 없었습니다. 하나 있습니까?
Nick

3

모든 워드 프레스 설치에서 wp-super-cache를 사용할 수 없으며 URL에 고정 형식이 없습니다. 영구 링크 설정 페이지에는 사용할 수있는 URL 스킴에 대한 일부 고정 설정이 제공되지만 누구나 사용자 정의 URL 스킴을 사용할 수 있습니다. 예를 들어 누구나 URL에 페이지 / 게시 이름 만 사용하기로 결정한 경우 Wordpress 웹 사이트인지 알아내는 것이 다소 불가능합니다.

xmlrpc가 있으면이를 감지 할 수 있지만 다시 비활성화 할 수 있습니다.

마지막으로 URL을 완전히 사용해도 WordPress를 사용하여 페이지가 작성되었는지 여부를 100 % 감지 할 수는 없습니다. 테마 템플릿과 개발 방법에 따라 다릅니다.

상당히 안정적인 방법 중 하나는 wp-login 및 wp-admin의 존재를 찾는 것입니다. 그러나 이것들조차도 움직일 수 있습니다. 그래도 이런 식으로 갈 것입니다.


1

주석에 대한 두 가지 대안은 자신의 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-로 시작하는 파일 중 하나에 헤드 요청을 보내는 방법은 무엇입니까? 이상적으로 wp-login.php를보십시오. 존재하는 경우 웹 사이트에서 WordPress를 실행 중임을 의미합니다.


wp-login.php하위 폴더에있을 수 있습니다.
유진 마누엘 로프

또한 리디렉션되어 이름을 바꿀 수도 있습니다.
카이저
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.