WordPress Rest API屏蔽部分接口的方法
2023-04-10
WordPress新版本默认开启了Rest API功能,对于大多数站长用不到,而且还容易被DDOS攻击。
本文提供一些屏蔽Rest API接口的方法。
1.全部禁止
add_filter( 'rest_api_init', 'cpury_custom_route', 99 );
function cpury_custom_route($wp_rest_server){
wp_die('禁止访问!');
}
自定义方法中可以添加过滤条件,比如只允许登录用户访问:
function cpury_custom_route($wp_rest_server){
if ( !is_user_logged_in() ) {
wp_die('禁止访问!');
}
}
注意is_user_logged_in方法仅适用于传统cookie原理网站,而对于JWT令牌网站无效。
2.部分禁止
通过$_SERVER[‘REQUEST_URI’]过滤url,实现禁止访问效果。
function cpury_kill_wp_json_rest_api() {
$request_uri = esc_attr( $_SERVER['REQUEST_URI'] );
$prefix = '/wp-json/wp/v2/';
// 直接完全屏蔽的集合
$forbidden_types = array(
$prefix . 'categories',
$prefix . 'tags',
$prefix . 'pages',
$prefix . 'taxonomies',
$prefix . 'types',
$prefix . 'statuses',
$prefix . 'settings',
$prefix . 'themes',
$prefix . 'block', // 多个
$prefix . 'plugins',
);
$flag = false;
foreach ($forbidden_types as $key => $value) {
if (strpos($request_uri, $value) !== false && !$flag) {
$flag = true;
}
}
if ($flag) {
// wp_die( 'Sorry, you are not allowed to access this site.');
wp_redirect('/'); // 重定向
exit(); // 停止执行
}
}
WordPress官方Rest API所有接口文档:https://developer.wordpress.org/rest-api/reference/
3.深度改造
WordPress初始化Rest API的源码文件在/wp-includes/rest-api/endpoints/*
公共注册路由的方法是register_routes。
通过屏蔽方法内的逻辑,或者借助内置的钩子以达到屏蔽的效果。
(版权归cpury.com所有,转载请注明出处。)