#教程# WordPress 关闭REST API 禁止网站、手机APP、小程序调用

前言

WordPress 从 4.4 版本开始新增的 JSON REST API 功能,通过这个 REST API 可以很轻松的获取网站的数据,可应用于其他网站、手机 APP 或小程序等;但对于一般的网站是没有需要的,反而会拖累网站的速度,而且 REST API 采用 GET 请求方式,这就为 DDOS 攻击提供了一个新的攻击途径,所以我们应尽可能的禁止掉这些不必要的功能需求,并且去掉 head 里面输出 wp-json 链接。

图片[1] - #教程# WordPress 关闭REST API 禁止网站、手机APP、小程序调用 - 云线路

关闭方法

查看 WP JSON REST API 是否开启的方法:http://域名/wp-json/,若输出数据则是开启状态。

这里使用纯代码的方法禁用,兼容所有 WordPress 版本的完全禁用 REST API 或者说移除 head 里面 wp-json 链接的方法。

此方法只适用于 WP 4.7 以上版本,在主题 functions.php 文件中添加代码即可禁用 JSON REST API :

完全禁用

完全禁用未登录用户获取 api

//未登录的用户禁用 REST API
add_filter( 'rest_api_init', 'lxtx_rest_only_for_authorized_users', 99 );
function lxtx_rest_only_for_authorized_users($wp_rest_server){
    if ( !is_user_logged_in() ) {
        wp_die('非法操作!');
    }
}

部分禁用

过滤部分端点不能访问,通过访问 https://站点/wp-json/,查看需要过滤的端点

//禁用 REST 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 过滤部分端点不能访问
    foreach ($endpoints as $key=>$value){
        if(preg_match("/^(\/wp\/v2|\/oembed\/1.0|\/ft\/v1)/",$key)){
            unset( $endpoints[$key] );
        }
    }
//
    if ( isset( $endpoints['/'] ) ) {
        unset( $endpoints['/'] );
    }

登录访问

部分 api,登录可以访问

//禁用 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;
});

因此如果我们想兼容所有版本的 WordPress,我们可以直接使用插件 Disable REST API 或 Disable WP REST API 来完全禁用 REST API。

移除头部 wp-json 标签和 HTTP header 中的 link(header 有 rel=”https://api.w.org/”):

// 移除头部 wp-json 标签和 HTTP header 中的 link
remove_action('wp_head', 'rest_output_link_wp_head', 10 );
remove_action('template_redirect', 'rest_output_link_header', 11 );
© 本站文章随意转载,但请注明出处!
THE END
点赞5 分享
评论 抢沙发
头像
务必使用真实的邮箱地址评论,虚假邮箱的评论将不通过审核及无回复。
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容