zoukankan      html  css  js  c++  java
  • 怎么禁用xmlrpc.php

    开发XML-RPC WordPress规范是为了标准化不同系统之间的通信,这意味着WordPress外部的应用程序(例如其他博客平台和桌面客户端)可以与WordPress进行交互。

    自WordPress诞生以来,该规范一直是WordPress的一部分,并且做得非常有用。没有它,WordPress将会处于自己的孤岛,与互联网的其余部分分离。

    但是,xmlrpc.php有其缺点。它可以向您的WordPress网站引入漏洞,现已被WordPress REST API取代,该API在将WordPress开放给其他应用程序方面做得更好。

    在本文中,我们将解释xmlrpc.php是什么,为什么要禁用它,并帮助您确定它是否正在WordPress网站上运行。

    什么是xmlrpc.php?

    XML-RPC是支持WordPress与其他系统之间通信的规范。它通过使用HTTP作为传输机制和XML作为编码机制来标准化这些通信来实现此目的。

    XML-RPC早于WordPress:它出现在b2博客软件中,该软件于2003年创建了WordPress。该系统的代码存储在站点根目录下的xmlrpc.php文件中。即使XML-RPC在很大程度上已经过时,它仍然存在。

    在WordPress的早期版本中,默认情况下已关闭XML-RPC。但是从3.5版开始,默认情况下已启用它。这样做的主要原因是允许WordPress移动应用程序与您的WordPress安装进行对话。

    如果您在3.5版之前使用WordPress移动应用程序,您可能会记得必须在站点上启用XML-RPC才能使该应用程序能够发布内容。这是因为该应用程序本身未运行WordPress。相反,它是一个单独的应用程序,使用xmlrpc.php与您的WordPress网站进行通信。

    但是XML-RPC不仅用于移动应用程序:它还用于允许WordPress和其他博客平台之间进行通信,还支持引用和pingback,并为Jetpack插件提供了动力,该插件链接了一个自托管的WordPress WordPress.com网站。

    但是由于REST API已集成到WordPress核心中,因此xmlrpc.php文件不再用于此通信。相反,REST API用于与WordPress移动应用程序,桌面客户端,其他博客平台,WordPress.com(用于Jetpack插件)以及其他系统和服务进行通信。REST API功能更强,使用更灵活。

    由于REST API取代了XML-RPC,因此您现在应该在站点上禁用xmlrpc.php。让我们看看为什么。

    为什么要禁用xmlrpc.php?

    您应该在WordPress网站上禁用xmlrpc.php的主要原因是因为它引入了安全漏洞, 并且可能成为攻击的目标。

    既然不再需要XML-RPC在WordPress之外进行通信,就没有理由保持它的活动状态。这就是为什么通过禁用站点来提高其安全性是明智的。

    如果xmlrpc.php属于安全责任,并且不再起作用,那么为什么不将其完全从WordPress中删除呢?

    这是因为WordPress的主要功能之一始终是向后兼容。如果您对网站进行了良好的管理,您将知道保持WordPress最新以及任何插件或主题是必不可少的。

    但是总会有不愿或无法更新其WordPress版本的网站所有者。如果他们运行的版本早于REST API,则他们仍然需要访问xmlrpc.php。

    通过XML-RPC Pingbacks进行DDoS攻击

    xmlrpc.php启用的功能之一是pingback和Trackbacks。当另一个博客或网站链接到您的内容时,这些通知将显示在您网站的评论中。

    XML-RPC规范使这种通信成为可能,但已被REST API取代(如我们所见)。

    如果您的站点上启用了XML-RPC,则黑客可能会利用xmlrpc.php在短时间内向您的站点发送大量pingback,从而在您的站点上发起DDoS攻击。这可能会使服务器超载,并使站点无法正常运行。

    通过XML-RPC的蛮力攻击

    每次xmlrpc.php发出请求时,它都会发送用户名和密码进行身份验证。这带来了重大的安全责任,而REST API却没有做到这一点。实际上,REST API使用OAuth来发送用于身份验证的令牌,而不是用户名或密码。

    因为xmlrpc.php随每个请求发送身份验证信息,所以黑客可以使用它来尝试访问您的站点。这样的暴力攻击可能使他们可以插入内容,删除代码或破坏数据库。

    如果攻击者向您的站点发送了足够多的请求,每个请求使用不同的用户名和密码对,则它们最终有可能会被攻击到正确的请求,从而使他们可以访问您的站点。

    因此,如果您正在运行WordPress的最新版本(使用REST API与外部系统进行通信),则应禁用xmlrpc.php。

    xmlrpc.php是否在您的WordPress网站上运行?

    您需要做的第一件事是确定xmlrpc.php是否正在您的WordPress网站上运行。

    这不是检查文件是否存在的简单情况:它是每个WordPress安装的一部分,即使禁用了XML-RPC,它也将存在。

    删除任何内容之前,请务必备份您的网站。在这种情况下,不要仅仅删除xmlrpc.php文件,因为它会破坏您的站点。

    要检查您的站点上是否启用了xmlrpc.php,请使用WordPress XML-RPC验证服务。这将检查您的站点并告诉您是否启用了xmlrpc.php。

    WordPress XML-RPC验证服务

    这是我在服务上检查此站点时得到的结果。

    XML-RPC检查

    这表明xmlrpc.php在www.dianjin123.com已被禁用。但是,如果您运行检查并发现xmlrpc.php仍在您的站点上启用,如何关闭它?

    如何禁用xmlrpc.php

    有三种禁用xmlrpc.php的方法:

    通过插件禁用xmlrpc.php无插件禁用xmlrpc.php让托管服务提供商禁用xmlrpc.php

    让我们分别看看每个。

    如何使用插件禁用xmlrpc.php

    安装插件是禁用xmlrpc.php是最简单的方法。插件地址https://wordpress.org/plugins/disable-xml-rpc/。使用方法如下。

    这个插件使用非常简单,简单的无需说明,只需要启用插件就可以。

    如何无插件禁用xmlrpc.php

    1、把下面的代码

    add_filter('xmlrpc_enabled','__return_false');放到functions.php文件中。

    2、通过.htacess文件禁用xmlrpc.php

    在您的.htaccess文件中,添加以下代码:

    <Files xmlrpc.php>OrderAllow,DenyDeny from all</Files>为避免遇到任何问题,请确保在此之前先备份旧文件。

    让您的托管服务提供商禁用xmlrpc.php

    可以在服务器配置文件Nginx.config中,添加:

    location~*^/xmlrpc.php$ {return403;}这将产生403错误。

    根据自己的实际情况,选择一种方法。

    https://wordpress.org/plugins/disable-xml-rpc/

    描述
    Pretty simply, this plugin disables the XML-RPC API on a WordPress site running 3.5 or above.

    很简单,此插件在运行3.5或更高版本的WordPress网站上禁用XML-RPC API。
    Beginning in 3.5, XML-RPC is enabled by default.

    从3.5开始,默认情况下启用XML-RPC。

    Additionally, the option to disable/enable XML-RPC was removed.

    此外,删除了禁用/启用XML-RPC的选项。

    For various reasons, site owners may wish to disable this functionality.

    由于各种原因,网站所有者可能希望禁用此功能。

    This plugin provides an easy way to do so.

    该插件提供了一种简便的方法。
    安装步骤
    Upload the disable-xml-rpc directory to the /wp-content/plugins/ directory in your WordPress installation
    将disable-xml-rpc目录上传到WordPress安装中的 / wp-content / plugins / 目录
    Activate the plugin through the ‘Plugins’ menu in WordPress
    通过WordPress中的“插件”菜单激活插件
    XML-RPC is now disabled!
    XML-RPC现在已禁用!
    To re-enable XML-RPC, just deactivate the plugin through the ‘Plugins’ menu.

    要重新启用XML-RPC,只需通过“插件”菜单停用该插件。

    禁用xmlrpc.php的避免DDOS攻击的几种方法

    那么我们如何可以禁用xmlrpc.php,从而阻止这些无效访问呢?有以下几种方法:

    一、修改主题functions.php文件

    1、在文件内添加以下代码:

    //禁用XML-RPC接口
    add_filter('xmlrpc_enabled', '__return_false');

    2、还可以用代码转向任意网址:

    add_action('login_enqueue_scripts','login_protection');
    function login_protection(){
    if($_GET['root'] != 'zhuanxiang')header('Location: http://任意其他网站或者网站首页/');
    }

    然后我们自己登录时需要用:网站域名/wp-login.php?root=zhuanxiang,这个网址访问后台。

    3、只关闭XML-RPC的pingback 端口

    如果你还是用使用第三方客户端来管理Wordpress文章,那么可以只关闭XML-RPC的pingback 端口

    //禁用XML-RPC的pingback接口
    add_filter( 'xmlrpc_methods', 'remove_xmlrpc_pingback_ping' );
    function remove_xmlrpc_pingback_ping( $methods ) {
    unset( $methods['pingback.ping'] );
    return $methods;
    }

    以上代码放到主题的functions.php文件即可。

    或者设置-讨论,前两个去掉对勾

    二、修改.htaccess文件

    1、加入以下代码:

    # protect xmlrpc
    <Files xmlrpc.php>
    Order Deny,Allow
    Deny from all
    </Files>

    或者
    <Files xmlrpc.php>
    <IfModule mod_authz_core.c>
    Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
    Order allow,deny
    Deny from all
    </IfModule>
    </Files>
     

    2、还可以让访问转向其他网址:

    # protect xmlrpc
    <IfModule mod_alias.c>
    Redirect 301 /xmlrpc.php http://baidu.com
    </IfModule>

    三、修改服务器配置

    1、nginx配置禁止访问该文件:

    location ~* /xmlrpc.php {
    deny all;
    }

    2、Apache配置禁止访问该文件:

    <IfModule mod_alias.c>
    Redirect 301 /xmlrpc.php http://baidu.com
    </IfModule>

    通过以上几种方法都可以实现禁止xmlrpc.php恶意访问的目的

    当你自己文章里调用了自己的某个文章链接时候wordpress会创建一个自我Pingbacks,这个东西没有什么价值。可以禁用。

    function no_self_ping( &$links ) {
    $home = get_option( 'home' );
    foreach ( $links as $l => $link )
      if ( 0 === strpos( $link, $home ) )
        unset($links[$l]);
    }
    add_action( 'pre_ping', 'no_self_ping' );

    写入functions.php保存即可

     修改的地方:

    1.function.php

    add_filter('pre_site_transient_update_core', create_function('$a', "return null;")); // 关闭核心提示
    add_filter('pre_site_transient_update_plugins', create_function('$a', "return null;")); // 关闭插件提示
    add_filter('pre_site_transient_update_themes', create_function('$a', "return null;")); // 关闭主题提示
    remove_action('admin_init', '_maybe_update_core'); // 禁止 WordPress 检查更新
    remove_action('admin_init', '_maybe_update_plugins'); // 禁止 WordPress 更新插件
    remove_action('admin_init', '_maybe_update_themes'); // 禁止 WordPress 更新主题
    add_filter( 'xmlrpc_enabled', '__return_false' );//禁用了XML-RPC

    2.设置-讨论去掉

    3.修改.htaccess

    <Files xmlrpc.php>
      <IfModule mod_authz_core.c>
        Require all denied
      </IfModule>
      <IfModule !mod_authz_core.c>
        Order allow,deny
        Deny from all
      </IfModule>
    </Files>

    4.安装插件

  • 相关阅读:
    git 使用
    使用Xcode 7 beta免费真机调试iOS应用程序
    Java类更改常量后编译不生效
    Spring AOP中pointcut expression表达式解析
    awk
    sed
    Servlet 单例多线程
    iOS 运行时添加属性和方法
    Lucene5学习之使用MMSeg4j分词器
    redis
  • 原文地址:https://www.cnblogs.com/luckyuns/p/14682114.html
Copyright © 2011-2022 走看看