何为REST API

REST API 是一个WordPress接口且默认启用,通过 REST API 任何人都可以访问WordPress 网站的一些公共数据信息。

可以在网站地址后面加上/wp-json 然后访问,如果有数据返回,则说明当前 WordPress 网站的 REST API 是开启的,能够直接访问网站的相关 JSON 数据。

由于REST API 的 Users 路径可以获取 WordPress 网站的用户数据(网址后面加上/wp-json/wp/v2/users便可以获得所有用户的信息),还是比较敏感和危险的,如果网站的插件不使用REST API,有必要将其禁用掉。

禁用方法

禁用方法常见的就是安装插件,但是插件数量太多会影响网站运行。

推荐直接通过在主题function.php文件中添加代码的方式来限制对 REST API 的访问。

//禁用REST API 
function kl_kill_wp_json_api() { 
   $request_uri = esc_attr( $_SERVER['REQUEST_URI'] ); 
   if ( substr( $request_uri, 0, 8 ) === '/wp-json' ) 
      wp_die( 'The WP REST API is not available on this site.' ); 
} 
add_action( 'init', 'kl_kill_wp_json_api', 99 ); 

需要注意的是,完全禁用 REST API 可能会使得某些插件和主题功能受到影响,无法正常使用。

对于只想禁用某些路径或API,可以参考以下代码自行修改套用。

禁止未登录的用户获取REST API(可能会导致网站无法访问)

//禁止未登录的用户获取API
add_filter( 'rest_api_init', 'rest_only_for_authorized_users', 99 );
function rest_only_for_authorized_users($wp_rest_server){
   if ( !is_user_logged_in() ) {
       wp_die('权限不足!');
   }
}

只禁用REST API的users路径,防止获取账户信息(推荐)

//禁用users路径API
add_filter( 'rest_endpoints', function( $endpoints ){
   if ( isset( $endpoints['/wp/v2/users'] ) ) {
      unset( $endpoints['/wp/v2/users'] );
   }
   if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) {
      unset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
   }
   return $endpoints;
});

删除REST API中所有的端点(若不理解,请勿使用)

//从API中删除所有端点
add_action(' plugins_loaded ',function(){ 
   remove_filter(' rest_api_init ',' create_initial_rest_routes '); 
});

禁止部分REST  API路径 和 用户访问(若不理解,请勿使用)

//组合使用:部分api、登录可以访问
add_filter( 'rest_endpoints', function( $endpoints ){
    foreach ($endpoints as $key=>$value){
        if(preg_match("/^(\/wp\/v2|\/oembed\/1.0|\/ft\/v1)/",$key) && defined(AUTH_KEY)){
            unset( $endpoints[$key] );
        }
    }
    if ( isset( $endpoints['/'] ) ) {
        unset( $endpoints['/'] );
    }
    return $endpoints;
});
说点什么
教程内容无法面面俱到,有疑问的可以留言讨论|´・ω・)ノ
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...