WordPress 完全禁用 REST API(最新版)

2018-06-20 17:05 2,468 19 条评论 龙笑天下
Dragon主题购买

WordPress 完全禁用 REST API(最新版)

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

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

在网上搜索了一圈,发现得到的方法基本只适用于 WordPress 4.7 以前的版本,而对于最新版的Wordpress则毫无办法了... 最后得到如下提示:

自 4.7.0 版本起,已不建议使用 rest_enabled,请换用 rest_authentication_errors。 REST API 不再能被完全禁用,不过您可以用“rest_authentication_errors”过滤器来限制对该 API 的访问。

因此如果我们想兼容所有版本的 Wordpress,我们可以直接使用插件Disable REST APIDisable WP REST API来完全禁用 REST API;但我更倾向纯代码的方法,在这里就介绍下代码版兼容所有 Wordpress 版本的完全禁用 REST API 或者说移除 head 里面 wp-json 链接的方法。PS:Dragon 主题已经集成该方法了,自行去启用即可~

直接将以下代码添加到主题的 functions.php 文件中即可禁用 JSON REST API :

/**
* WordPress 完全禁用 REST API(最新版)- 龙笑天下
* https://www.ilxtx.com/disable-json-rest-api-in-wordpress.html
*/
// 屏蔽 REST API
if ( version_compare( get_bloginfo( 'version' ), '4.7', '>=' ) ) {
    function lxtx_disable_rest_api( $access ) {
        return new WP_Error( 'rest_api_cannot_acess', '无访问权限', array( 'status' => rest_authorization_required_code() ) );
    }
    add_filter( 'rest_authentication_errors', 'lxtx_disable_rest_api' );
} 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('template_redirect', 'rest_output_link_header', 11 );
remove_action('wp_head', 'rest_output_link_wp_head', 10 );
remove_action('xmlrpc_rsd_apis', 'rest_output_rsd');

这样在访问 wp-json 的链接时就会提示无权限了~

此外,对于 WP 4.7 以上版本,还有种通过rest_api_init这个钩子来禁用 REST API 的方法,大家也可以尝试并改造下。

/**
 * WordPress 完全禁用 REST API(最新版)- 龙笑天下
 * https://www.ilxtx.com/disable-json-rest-api-in-wordpress.html
 */
/*禁用未登录的用户*/
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('非法操作!');
    }
}

相关参考:

WordPress 禁用未登录的用户访问 REST API - CSDN
WordPress4.7 以上版本如何禁用 JSON REST API? - BOKE112

「点点赞赏,手留余香」

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

2018-05-20

2018-07-27

发表评论

表情 格式 贴图 链接 私密 签到
Dragon主题购买阿里云特价云服务器1核2G低至86元,N4共享型服务器3年仅需799元腾讯云特价云服务器1核2G 88元/年 2核4G3M688元/3年,更有千元代金券礼包免费领!
评论
正在努力加载中...
扫一扫二维码分享
×
We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept”, you consent to the use of ALL the cookies. Learn more