Cách tốt nhất để loại bỏ tệp xmlrpc.php khỏi WordPress khi bạn không cần nó là gì?
Cách tốt nhất để loại bỏ tệp xmlrpc.php khỏi WordPress khi bạn không cần nó là gì?
Câu trả lời:
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 .htaccess
tệ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.php
tệ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ụngXML-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.
@Prosti, -Bạn hoàn toàn chính xác - về các tùy chọn RESTful API
sẽ 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 API
cũ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.
X-Pingback
tiê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);
.
functions.php
sẽ mất hết tác dụng khi thay đổi chủ đề. function.php
chỉ dành cho mục đích thiết kế, sử dụng một plugin!
=
) 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 {
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
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_enabled
bộ 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_methods
bộ 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
Điều tốt nhất để làm là vô hiệu hóa các xmlrpc.php
chứ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.php
tệp của chủ đề hoặc thêm order,allow deny
quy 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.php
qua 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.
Đố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>
Theo cách đầu tiên, bạn có thể đặt mã add_filter('xmlrpc_enabled', '__return_false');
trong tệp functions.php
cụ 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
.
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.
/xmlrpc.php
và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ố.