广告投放

WordPress最新版完全禁用JSON REST API输出站点信息

目录

    WordPress 从 4.4 版本开始新增的 JSON REST API 功能,通过这个 REST API 可以很轻松的获取网站的数据,可应用于其他网站、手机 APP 或小程序等

    前段时间使用过这个做了一段时间的小程序,后来感觉没必要,而且还使用的他人的插件,反而会拖累网站的速度,而且 REST API 采用 GET 请求方式,这就为 DDOS 攻击提供了一个新的攻击途径

    顺手看了一下我的服务器宝塔就发现居然有人爬我网站,用的就是这个 REST API

    WordPress最新版完全禁用JSON REST API输出站点信息

    美国的 ip,我以为是腾讯云加社区的爬虫,去群里问了一下运营人员,说不是他们的爬虫,果断禁掉,大哥我是小水管,你放过我吧 

    所以我们应尽可能的禁止掉这些不必要的功能需求,并且去掉 head 里面输出 wp-json 链接,我之前就直接输出了,查看源代码就能直接看到

    需要简单一点的话,我们可以直接使用插件 Disable REST API 来完全禁用 REST API,但我更倾向纯代码的方法,在这里就介绍下代码版兼容所有 WordPress 版本的完全禁用 REST API 或者说移除 head 里面 wp-json 链接的方法

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

    // 屏蔽 REST API
    if ( version_compare( get_bloginfo( 'version' ), '4.7', '>=' ) ) {
        function disable_rest_api( $access ) {
            return new WP_Error( 'rest_cannot_acess', '无访问权限', array( 'status' => 403 ) );
        }
        add_filter( 'rest_authentication_errors', '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('wp_head', 'rest_output_link_wp_head', 10 );
    remove_action('template_redirect', 'rest_output_link_header', 11 );

    当然也可以借助 Nginx 来控制 /wp-json 的访问,这里就不说了,可以通过判断请求头的 UA 信息来操作,除了 iOS 跟 Android 设备,其它访问 /wp-json 的路径均返回 403 状态码

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

    给TA打赏
    共{{data.count}}人
    人已打赏
    广告位招租919838898
    0 条回复 A文章作者 M管理员
      暂无讨论,说说你的看法吧
    个人中心
    购物车
    优惠劵
    今日签到
    有新私信 私信列表
    搜索