xmlrpc.php를 제거하는 가장 좋은 방법은 무엇입니까?


답변:


26

WordPress 3.5부터이 옵션 ( XML-RPC)은 기본적으로 활성화되어 있으며 WordPress에서 끄는 기능 dashboard이 없습니다.

다음에서 사용하기 위해이 코드 스 니펫을 추가하십시오 functions.php.

// Disable use XML-RPC
add_filter( 'xmlrpc_enabled', '__return_false' );

// Disable X-Pingback to header
add_filter( 'wp_headers', 'disable_x_pingback' );
function disable_x_pingback( $headers ) {
    unset( $headers['X-Pingback'] );

return $headers;
}

비록 그것이 말한 것을 수행하지만, 사이트를 공격함으로써 공격을받을 때 집중할 수 있습니다. 파일
에서 다음 코드 스 니펫을 사용하는 것이 좋습니다 .htaccess.

# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order allow,deny
deny from all
</Files>

또는 xmlrpc.phpNGINX 서버 블록에서 파일에 대한 액세스를 비활성화하려면이 옵션을 사용 하십시오.

# nginx block xmlrpc.php requests
location /xmlrpc.php {
    deny all;
}

비활성화하면 모바일을 통한 로그인에도 영향을 줄 수 있습니다. 내가 올바른 WordPress 모바일 앱이라면 이것이 필요합니다.
에 대한 자세한 내용은 코덱 을 참조하십시오 XML-RPC.

  • 편집 / 추가하기 전에 항상 파일을 백업하십시오.


편집 / 업데이트

@Prosti,-당신은 RESTful APIWordPress에 제공 할 옵션에 대해 절대적으로 정확 합니다!

나는 이것을 언급하는 것을 잊었다. 당시에는 불가능했던 코어 ( WordPress 버전 4.1 )에 이미 통합되어 있어야합니다 . 그러나 WordPress 4.5에서 핵심이 될 것입니다.

순간의 대안이 플러그인 : 워드 프레스 REST API (버전 2)
까지 당신은 그것을 사용할 수 있습니다 Restful API또한 워드 프레스의 핵심이다.
WordPress 4.5 출시 예정일. (2016 년 4 월 12 일 (+3 주))

에 관심이있는 사람들을 위해 RESTful에, 유래 아주 좋은 커뮤니티 위키입니다.


2
내가 올바른 WordPress 모바일 앱이라면 이것이 필요합니다
-WordPress

2
여전히 X-Pingback단일 게시물 / 페이지에 대한 헤더를 얻는 사람들을 위해. 완전히 제거하려면 다른 필터를 사용해야 add_filter('pings_open', '__return_false', PHP_INT_MAX);합니다..
MinhTri

1
functions.php테마를 변경할 때 이와 같은 것을 추가하면 모든 효과가 사라집니다. function.php디자인 목적으로 만 플러그인을 사용하십시오!
David

@David, 그러나 ppl은 그런 플러그인을 만드는 대신 mu-plugins 폴더를 사용하는 것이 좋습니다. ppl이 이와 같은 기능을 필요로하거나 사용하는 경우 이유가 있기 때문에 누군가 (관리자조차도)가 플러그인을 비활성화하는 옵션을 갖기를 원하지 않습니다.
찰스

=nginx conf 코드의 첫 번째 줄에 등호 ( )가없는 것처럼 보입니다 . 이것은 나를 위해 일했다 : location = /xmlrpc.php {
Dave

5

우리는 해커로부터 파일을 보호하기 위해 htaccess 파일을 사용하고 있습니다.

# BEGIN protect xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END protect xmlrpc.php

5

웹 서버 구성을 통해 차단할 수 있으면 @Charles의 제안이 좋습니다.

PHP를 사용해서 만 비활성화 할 수 있다면 xmlrpc_enabled필터가 올바른 방법이 아닙니다. 마찬가지로 여기에 설명 : https://developer.wordpress.org/reference/hooks/xmlrpc_enabled/ 에만 인증을 필요로 XML을 RPC 메소드를 사용하지 않습니다.

대신 xmlrpc_methods필터를 사용하여 모든 방법을 비활성화하십시오.

<?php
// Disable all xml-rpc endpoints
add_filter('xmlrpc_methods', function () {
    return [];
}, PHP_INT_MAX);

다음 컨텐츠와 함께 xmlrpc.php에 POST 요청을 보내서 작동하는지 테스트 할 수 있습니다.

<methodCall>
    <methodName>system.listMethods</methodName>
</methodCall>

필터가 작동하면 3 가지 방법 만 남습니다.

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
    <params>
        <param>
            <value>
                <array>
                    <data>
                        <value>
                            <string>system.multicall</string>
                        </value>
                        <value>
                            <string>system.listMethods</string>
                        </value>
                        <value>
                            <string>system.getCapabilities</string>
                        </value>
                    </data>
                </array>
            </value>
        </param>
    </params>
</methodResponse>

컬로 빠르게 테스트 할 수 있습니다.

curl -X POST \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/xml' \
  -d '<methodCall><methodName>system.listMethods</methodName></methodCall>' \
  https://your-wordpress-site.com/xmlrpc.php

4

가장 좋은 방법 xmlrpc.php은 파일 자체를 삭제하거나 비활성화하지 않고 플러그인으로 기능을 비활성화하는 것입니다. 파일 자체는 WordPress 핵심 업데이트에서 대체되는 반면, 플러그인은 핵심 업데이트 후 및 테마를 변경 한 경우 비활성화 된 상태로 유지됩니다.

다른 플러그인에 대해서는 https://wordpress.org/plugins/search.php?q=disable+xml-rpc 를 참조 하십시오 . 그들은 모두 약간의 차이가 있습니다.

이러한 플러그인은 테마의 추가 기능과 같은 일을 할 functions.php파일이나 추가 order,allow deny의 차이에 플러그인 또는 기능을 비활성화 통화 인 상태, (다른 답변에 설명 된대로)의 .htaccess에 규칙을 xmlrpc.phpPHP를 통해, 그리고 htaccess로 작품의 규칙 웹 서버에서 mod_rewrite를 활용하여 (예 : Apache 또는 Nginx). 최신 서버에서 PHP와 mod_rewrite를 사용하는 것 사이에는 눈에 띄는 성능 차이가 없습니다.


3

IIS에서 WordPress를 호스팅하는 극소수의 경우 IIS URL 다시 쓰기 모듈을 사용하여 유사한 htaccess와 같은 제한을 수행 할 수 있습니다. 아래 예에서는 실제 클라이언트 IP가 X-Forwarded-For 헤더에 있고 알려진 화이트리스트 IP는 55.55.555.555이며 화이트리스트가 아닌 IP에 HTTP 404로 응답한다고 가정합니다.

<rule name="wordpress-restrictions" enabled="true" stopProcessing="true">
    <match url="(^xmlrpc.php)|(^wp-admin)|(^wp-login.php)" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_X_FORWARDED_FOR}" pattern="(^55\.55\.555\.555$)" negate="true" />
    </conditions>
    <action type="CustomResponse" statusCode="404" subStatusCode="44" statusReason="File or directory not found" statusDescription="The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable." />
</rule>

0

첫 번째 방법으로 add_filter('xmlrpc_enabled', '__return_false');파일 functions.php또는 사이트 특정 플러그인에 코드 를 넣을 수 있습니다 . 파일을 편집하는 것보다 사이트 고유의 사이트에 명확하게 배치하는 것이 좋습니다 functions.php.

xmlrpc를 제거하는 다른 방법들


0

최근에 버전 6.3.12부터 모든 위치에 대한 직접 액세스를 차단할 수있는 Wordfence를 설치했습니다. 금지 된 액세스 IP 목록의 옵션 페이지에 /xmlrpc.php를 넣으면 "이 URL에 액세스하는 IP를 즉시 차단합니다"라는 메시지 가 15 분마다 차단되는 시도가 표시됩니다.

이것은 또한 다른 IP 주소로 다시 돌아 오는 성가신 봇에서 탈출하기 위해 URL을 차단할 수 있다는 장점이 있습니다.

유효한 작업에 Apps에서 xmlrpc.php를 사용할 수 있는지 여부는 알 수 없습니다.

처음에는 서버에서 504 시간 초과 및 502 잘못된 게이트웨이 오류가 발생하는 데 문제가 있었지만 해결 된 것 같습니다.

지금까지의 결과에 깊은 인상을 받았으며 Wordfence를 설치하기 전에 사이트가 해킹 된 후 항상 최신 버전의 WordPress 및 플러그인이 있음에도 불구하고 귀중한 정리 프로파일을 생성했습니다.

워드 펜스 https://www.wordfence.com/


/xmlrpc.php액세스하는 IP를 금지하는 보안 규칙에 추가하면 합법적 인 트래픽을 차단할 수있는 것 같습니다. 핑백이 활성화 된 사이트가 귀하의 사이트에 대한 링크를 연결하면 해당 사이트는 해당 URL로 요청을 보내고 즉시 차단됩니다. 문제가 발생할 수있는 것처럼 보입니다.
adam-asdf

0

나는이 작은 코드를 nginx에 사용하며 이것은 100 % 작동합니다.

location ~* (/wp-content/.*\.php|/wp-includes/.*\.php|/xmlrpc\.php$|/(?:uploads|files)/.*\.php$) {
deny all;
access_log off;
log_not_found off;
return 444;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.