禁止WordPress程序REST API功能且移除wp-json链接

毋庸置疑WordPress算是当前比较好用的PHP程序,基本上个人博客、企业网站,小型商务网站都可以使用到。而且WordPress官方的更新、第三方的插件主题丰富,让这个程序变得越来越丰富多样,但是随着不断的升级功能,也会增加程序的负担和不安全因素。

比如从WordPress4.4开始增加REST API功能, 对于一般的网站是没有需要的,反而会拖累网站的速度,所以我们尽可能的禁止掉这些不必要的功能需求。我们在源代码中可以看到类似的链接字符。

<link rel=’https://api.w.org/’ href=’http://www.uziwp.com/wp-json/’ />

这里老季将记录下如何解决这个问题的过程,一来需要移除掉这个链接,二来需要禁止REST API功能。

第一、非插件方式

将脚本丢到当前主题的functions.php文件中。但是,我们会发现链接是去掉了,但是打开wp-josn还是可以看到输出字符。然后老季再启用到一个插件才可以解决。

此外,对于 WP 4.7 以上版本,还有种通过rest_api_init这个钩子来禁用 REST API 的方法

// 屏蔽 REST API
if (version_compare(get_bloginfo('version'), '4.7', '>=')) {
  add_filter('rest_authentication_errors', function(){
    add_filter('rest_authentication_errors', function ($result) {
         
      if (true === $result || is_wp_error($result)) {
        return $result;
           }

           if (!is_user_logged_in()) {
               return new WP_Error('rest_cannot_access', __('没有权限'), array('status' => 403));
           }

            return $result;
    });
    });
} else {
    // Filters for WP-API version 1.x
    add_filter('json_enabled', '__return_false');
    add_filter('json_jsonp_enabled', '__return_false');
    // Filters for WP-API version 2.x
    add_filter('rest_enabled', '__return_false');
    add_filter('rest_jsonp_enabled', '__return_false');
}
// 移除头部 wp-json 标签和 HTTP header 中的 link
remove_action('wp_head', 'rest_output_link_wp_head', 10);
remove_action('template_redirect', 'rest_output_link_header', 11);
/*禁用未登录的用户访问API*/
add_filter('rest_api_init', function(){
    if (!is_user_logged_in()) {
        wp_die(__('非法操作!'));
    }
}, 99);

第二、disable-json-api插件

插件地址:https://wordpress.org/plugins/disable-json-api/

下载和启动插件之后,可以彻底解决输出字符问题。

WeChat