Cách tốt nhất để loại bỏ xmlrpc.php?


Câu trả lời:


26

Vì WordPress 3.5, tùy chọn này ( XML-RPC) được bật theo mặc định và khả năng tắt tùy chọn này khỏi WordPress dashboard.

Thêm đoạn mã này để sử dụng trong 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;
}

Mặc dù nó thực hiện những gì nó nói, nhưng nó có thể trở nên chuyên sâu khi một trang web đang bị tấn công bằng cách đánh vào nó.
Bạn có thể tốt hơn bằng cách sử dụng đoạn mã sau trong .htaccesstệp của mình .

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

Hoặc sử dụng điều này để vô hiệu hóa quyền truy cập vào xmlrpc.phptệp từ khối máy chủ NGINX.

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

Xin lưu ý rằng việc vô hiệu hóa cũng có thể có tác động đến thông tin đăng nhập thông qua thiết bị di động. Nếu tôi đúng ứng dụng di động WordPress thì cần cái này.
Xem Codex để biết thêm thông tin về việc sử dụng XML-RPC.

  • Vui lòng tạo bản sao lưu của (các) tệp trước khi chỉnh sửa / thêm.


Chỉnh sửa / Cập nhật

@Prosti, -Bạn hoàn toàn chính xác - về các tùy chọn RESTful APIsẽ cung cấp cho WordPress!

Tôi quên đề cập đến điều này. Nó đã được tích hợp vào lõi ( phiên bản WordPress 4.1 ) không thể có vào thời điểm đó. Nhưng dường như, nó sẽ là cốt lõi trong WordPress 4.5.

Thay thế cho thời điểm này là plugin này: WordPress REST API (Phiên bản 2)
Bạn có thể sử dụng nó cho đến khi đó Restful APIcũng là cốt lõi cho WordPress.
Ngày đích để phát hành WordPress 4.5. (Ngày 12 tháng 4 năm 2016 (+ 3w))

Đối với những người quan tâm RESTful, trên Stackoverflow là một wiki cộng đồng rất đẹp.


2
Nếu tôi WordPress đúng ứng dụng di động không cần điều này - có thể xảy ra này sẽ không cần thiết trong tương lai khi chúng tôi có chuyển đổi sang WordPress RESTful API (WordPress 4.5)
prosti

2
Đối với những người vẫn nhận được X-Pingbacktiêu đề cho bài viết / trang duy nhất. Chúng ta cần sử dụng một bộ lọc khác để loại bỏ nó hoàn toàn : add_filter('pings_open', '__return_false', PHP_INT_MAX);.
MinhTri

1
Thêm những thứ như thế functions.phpsẽ mất hết tác dụng khi thay đổi chủ đề. function.phpchỉ dành cho mục đích thiết kế, sử dụng một plugin!
David

@David, chắc chắn nhưng ppl sau đó sử dụng thư mục mu-plugins tốt hơn, thay vì tạo một plugin như vậy. Khi ppl cần / sử dụng một chức năng như thế này, họ có lý do đó và không muốn bất kỳ ai (thậm chí không phải là quản trị viên) có tùy chọn hủy kích hoạt plugin.
Charles

Có vẻ như có một dấu bằng ( =) bị thiếu trong dòng đầu tiên của mã conf nginx ở đó. Điều này làm việc cho tôi: location = /xmlrpc.php {
Dave

5

Chúng tôi đang sử dụng tệp htaccess để bảo vệ nó khỏi tin tặc.

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

5

Khi bạn có khả năng chặn nó thông qua cấu hình máy chủ web của bạn, các đề xuất của @Charles là tốt.

Nếu bạn chỉ có thể vô hiệu hóa nó bằng php, xmlrpc_enabledbộ lọc không đúng cách. Giống như tài liệu ở đây: https://developer.wordpress.org/reference/hooks/xmlrpc_enables/ nó chỉ vô hiệu hóa các phương thức rml xml yêu cầu xác thực.

Thay vào đó, hãy sử dụng xmlrpc_methodsbộ lọc để tắt tất cả các phương thức:

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

Bạn có thể kiểm tra xem nó có hoạt động không bằng cách gửi yêu cầu POST đến xmlrpc.php với nội dung theo dõi:

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

Nếu bộ lọc hoạt động, chỉ còn 3 phương thức:

<?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>

bạn có thể nhanh chóng kiểm tra nó với curl:

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

Điều tốt nhất để làm là vô hiệu hóa các xmlrpc.phpchức năng với một plugin chứ không phải xóa hoặc vô hiệu hóa chính tập tin. Bản thân tệp sẽ được thay thế trên các bản cập nhật lõi của WordPress, trong khi một plugin sẽ khiến nó bị vô hiệu hóa sau các bản cập nhật cốt lõi và nếu bạn thay đổi chủ đề.

Xem https://wordpress.org/plugins/search.php?q=disable+xml-rpc để biết các plugin khác nhau. Họ đều có những khác biệt nhỏ.

Các plugin này thực hiện tương tự như một chức năng được thêm vào functions.phptệp của chủ đề hoặc thêm order,allow denyquy tắc vào .htaccess (như được nêu trong các câu trả lời khác), với sự khác biệt là một plugin hoặc chức năng vô hiệu hóa các lệnh gọi xmlrpc.phpqua PHP và quy tắc trong .htaccess hoạt động bằng cách tận dụng mod_rewrite trong máy chủ web (ví dụ: Apache hoặc Nginx). Không có sự khác biệt đáng kể về hiệu suất giữa việc sử dụng PHP và mod_rewrite trên một máy chủ hiện đại.


3

Đối với nhóm thiểu số cực đoan đang lưu trữ WordPress trong IIS, bạn có thể sử dụng mô-đun Viết lại URL của IIS để thực hiện các hạn chế tương tự như htaccess. Ví dụ dưới đây giả sử IP khách hàng thực sự xuất hiện trong tiêu đề X-Forwarded-For, IP danh sách trắng được biết đến là 55.55.555.555 và bạn muốn phản hồi với HTTP 404 cho các IP không thuộc danh sách trắng.

<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

Theo cách đầu tiên, bạn có thể đặt mã add_filter('xmlrpc_enabled', '__return_false');trong tệp functions.phpcụ thể của tệp hoặc trang web. Rõ ràng việc đặt nó trong trang web cụ thể được khuyến nghị hơn là chỉnh sửa tệp functions.php.

và các cách khác để loại bỏ xmlrpc


0

Gần đây tôi đã cài đặt Wordfence, kể từ phiên bản 6.3.12 có khả năng chặn truy cập trực tiếp vào bất kỳ vị trí nào. Đưa /xmlrpc.php vào trang Tùy chọn trong danh sách IP truy cập bị cấm "Chặn ngay lập tức các IP truy cập các URL này" hiện đang hiển thị một lần thử bị chặn sau mỗi 15 phút.

Điều này cũng có lợi thế là có thể chặn một URL để thoát khỏi các bot phiền phức đó quay lại với địa chỉ IP khác nhau nhiều lần.

Tôi không biết liệu nó có cho phép sử dụng xmlrpc.php bởi Ứng dụng cho các hoạt động hợp lệ hay không.

Tôi đã có một số vấn đề với nó khi tạo ra 504 Timeout và 502 Bad Gateway lỗi trên máy chủ nhưng có vẻ như nó đã được giải quyết.

Rất ấn tượng với kết quả cho đến nay và nó đã tạo ra một hồ sơ dọn dẹp có giá trị sau khi trang web đã bị hack trước khi cài đặt Wordfence và mặc dù luôn có phiên bản mới nhất của WordPress và plugin.

Từ ngữ https://www.wordfence.com/


Thêm /xmlrpc.phpvào một quy tắc bảo mật cấm các IP truy cập có vẻ như nó có thể chặn lưu lượng truy cập hợp pháp. Nếu một trang web có pingback kích hoạt liên kết đến trang web của bạn, trang web đó sẽ gửi yêu cầu tới URL đó và ngay lập tức bị chặn ... có vẻ như nó có thể gây ra sự cố.
adam-asdf

0

tôi sử dụng cho nginx Mã nhỏ này và nó hoạt động 100%

location ~* (/wp-content/.*\.php|/wp-includes/.*\.php|/xmlrpc\.php$|/(?:uploads|files)/.*\.php$) {
deny all;
access_log off;
log_not_found off;
return 444;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.