何为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;
});
声明: 本文采用 BY-NC-SA 协议进行授权,如无注明均为原创,转载请注明转自 久住坡
本文地址: Wordpress禁用REST API
本文地址: Wordpress禁用REST API