วิธีที่ดีที่สุดในการกำจัด 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.phpไฟล์จากบล็อกเซิร์ฟเวอร์ NGINX

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

โปรดทราบว่าการปิดใช้งานอาจส่งผลต่อการเข้าสู่ระบบผ่านมือถือ หากฉันเป็นแอพมือถือ WordPress ที่ถูกต้องก็จำเป็นต้องใช้สิ่งนี้
ดูCodexXML-RPCสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานของ

  • กรุณาทำการสำรองไฟล์เสมอก่อนที่จะแก้ไข / เพิ่ม


แก้ไข / ปรับปรุง

@Prosti - คุณถูกต้องอย่างแน่นอน - เกี่ยวกับตัวเลือกที่RESTful APIจะเสนอสำหรับ WordPress!

ฉันลืมที่จะพูดถึงเรื่องนี้ มันควรจะได้รับการรวมเข้ากับคอร์ ( รุ่น WordPress 4.1 ) ซึ่งเป็นไปไม่ได้ในเวลานั้น แต่ดูเหมือนว่าจะเป็นแกนหลักใน WordPress 4.5

ทางเลือกในขณะนี้คือปลั๊กอินนี้: WordPress REST API (เวอร์ชัน 2)
คุณสามารถใช้งานได้จนถึงRestful APIเป็นหลักสำหรับ WordPress
วันที่เป้าหมายสำหรับการเปิดตัว WordPress 4.5 (12 เมษายน 2559 (+ 3w))

สำหรับผู้ที่มีความสนใจในRESTfulในStackoverflowเป็นวิกิพีเดียชุมชนดีมาก


2
ถ้าฉันต้องการแอพมือถือ WordPress ที่ถูกต้องสิ่งนี้ - น่าจะเป็นสิ่งที่ไม่จำเป็นในอนาคตเมื่อเราเปลี่ยนไปใช้ WordPress RESTful API (WordPress 4.5)
prosti

2
สำหรับผู้ที่ยังคงได้รับX-Pingbackส่วนหัวสำหรับโพสต์ / หน้าเดียว เราจำเป็นต้องใช้ตัวกรองอื่นเพื่อลบออกอย่างสมบูรณ์: add_filter('pings_open', '__return_false', PHP_INT_MAX);.
MinhTri

1
การเพิ่มสิ่งต่าง ๆ เช่นนั้นไปfunctions.phpจะสูญเสียเอฟเฟกต์ทั้งหมดเมื่อเปลี่ยนธีม function.phpใช้สำหรับการออกแบบเท่านั้นใช้ปลั๊กอิน!
David

@David แน่นอน แต่ ppl ก็ควรใช้โฟลเดอร์ mu-plugins แทนการสร้างปลั๊กอินดังกล่าว เมื่อ ppl ต้องการ / ใช้ฟังก์ชั่นเช่นนี้พวกเขามีเหตุผลนั้นและไม่ต้องการให้ใคร (ไม่ใช่แม้แต่ผู้ดูแลระบบ) มีตัวเลือกในการยกเลิกการเปิดใช้งานปลั๊กอิน
ชาร์ลส์

ดูเหมือนว่ามีเครื่องหมายเท่ากับ ( =) หายไปในบรรทัดแรกของโค้ด conf nginx ที่นั่น สิ่งนี้ใช้ได้กับฉัน: location = /xmlrpc.php {
เดฟ

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);

คุณสามารถทดสอบว่าใช้งานได้หรือไม่โดยส่งคำขอ POST ไปที่ xmlrpc.php ด้วยเนื้อหา folling:

<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 อย่างรวดเร็ว:

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.phpผ่านทาง PHP โดยใช้ประโยชน์จาก mod_rewrite ในเว็บเซิร์ฟเวอร์ (เช่น Apache หรือ Nginx) ไม่มีความแตกต่างด้านประสิทธิภาพระหว่างการใช้ PHP และ mod_rewrite บนเซิร์ฟเวอร์ที่ทันสมัย


3

สำหรับชนกลุ่มน้อยสุดที่โฮสต์ WordPress ใน IIS คุณสามารถใช้โมดูล IIS URL Rewrite เพื่อทำข้อ จำกัด คล้ายกับ htaccess ตัวอย่างด้านล่างถือว่า IP ไคลเอ็นต์จริงกำลังมาในส่วนหัว X-Forwarded-For, IP ที่อนุญาตที่รู้จักคือ 55.55.555.555 และคุณต้องการตอบกลับด้วย HTTP 404 กับ IP ที่ไม่ใช่รายการที่ปลอดภัย

<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

ฉันเพิ่งติดตั้ง Wordfence ซึ่งเป็นรุ่น 6.3.12 มีความสามารถในการบล็อกการเข้าถึงโดยตรงไปยังตำแหน่งใด ๆ การใส่ /xmlrpc.php ไปที่หน้าตัวเลือกในรายการการเข้าถึงที่ถูกห้าม"บล็อก IP ที่เข้าถึง URL เหล่านี้ทันที"กำลังแสดงความพยายามหนึ่งครั้งที่ถูกบล็อกทุก 15 นาที

นอกจากนี้ยังมีข้อดีของความสามารถในการบล็อก URL เพื่อหลีกเลี่ยงบ็อตที่น่ารำคาญที่กลับมาพร้อมกับที่อยู่ IP ที่แตกต่างกันและอีกครั้ง

ฉันไม่ทราบว่าอนุญาตให้ใช้ xmlrpc.php โดยแอปเพื่อการดำเนินการที่ถูกต้องหรือไม่

ฉันมีปัญหาบางอย่างกับมันทำให้เกิดข้อผิดพลาด 504 Timeout และ 502 Bad Gateway บนเซิร์ฟเวอร์ในตอนแรก แต่ดูเหมือนว่าจะมีปัญหา

ประทับใจมากกับผลลัพธ์ที่ผ่านมาและสร้างโปรไฟล์การล้างข้อมูลที่มีค่าหลังจากไซต์ถูกแฮ็กก่อนที่จะติดตั้ง Wordfence และแม้จะมีเวิร์ดเพรสและปลั๊กอินเวอร์ชันล่าสุดอยู่เสมอ

Wordfence https://www.wordfence.com/


การเพิ่ม/xmlrpc.phpกฎความปลอดภัยห้าม IP ที่เข้าถึงดูเหมือนว่าสามารถบล็อกทราฟฟิกที่ถูกกฎหมายได้ หากไซต์ที่เปิดใช้งานลิงก์ pingbacks ไปยังเว็บไซต์ของคุณไซต์นั้นจะส่งคำขอไปยัง 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.