WordPress课程广告

WordPress设置Rest API 访问权限

释放双眼,带上耳机,听听看~!

默认情况下,WordPress REST API 默认是开放状态的,黑客可以利用WordPress REST API获取我们网站数据或者对我们网站进行一些操作,但是现在有很多程序都是基于Rest API实现的,所以直接禁用显示是不合适的,我们给WordPress Rest API 设置访问权限,来增加我们网站的安全性。

通过代码实现

add_filter('rest_authentication_errors', function ($result) {
    // If a previous authentication check was applied,
    // pass that result along without modification.
    if (true === $result || is_wp_error($result)) {
        return $result;
    }

    // No authentication has been performed yet.
    // Return an error if user is not logged in.
    if (!is_user_logged_in()) {
        return new WP_Error(
            'rest_not_logged_in',
            __('No way! You are not currently logged in.'),
            array('status' => 401)
        );
    }

    // Our custom authentication check should have no effect
    // on logged-in requests
    return $result;
});

代码来源:Simple MU plugin to prevent WordPress REST API access without login · GitHub

代码简单解释

上面代码用于设置 REST API 请求权限,作用是确保只有已登录的用户才能访问 REST API,未登录用户将会收到相应的错误提示。

代码使用add_filter函数添加一个过滤器,当出现 REST API 认证错误时将执行指定的函数。

如果$result为true或者是一个 WordPress 错误对象(WP_Error),则直接返回$result,表示之前的认证检查结果已经被应用,无需修改。

如果还未进行认证检查,会进行以下操作:

如果用户未登录,则返回一个新的WP_Error对象,包含错误代码:rest_not_logged_in、错误消息:No way! You are not currently logged in.、以及状态码为401,表示用户未登录。

对于已登录的用户请求,代码的自定义认证检查不应该对其产生影响,所以直接返回$result。

将上述代码添加到你主题的functions.php文件中即可,流程如下:

编辑当前主题的 functions.php 文件

WordPress网站后台 – 仪表盘 – 外观 – 主题文件编辑器(有的版本可能显示是编辑)>选择主题functions.php文件>添加代码>保存文件:

WordPress后台>主题文件编辑器>编辑functions.php文件页面

注意

上面添加到主题functions.php文件的这种方式添加的功能代码只在当前使用主题下有作用,如果你切换了主题,那么这个时候就会失效,所以要注意。

推荐

推荐你使用WPCode 代码片段插件,你可以直接将上述代码添加为一个新的代码片段开启,在不需要的时候也可以直接对这个功能代码选择关闭就行,这个插件可以非常方便的管理在WordPress网站上的功能代码,如下示例:

WPCode 插件代码片段列表、管理示例

这个插件它的代码库中还有许多使用的功能代码片段,你可以选择你用得上的然后导入、选择开启就可以了,如下示例:

WordPress代码片段插件 WPCode 代码片段库截图

关于这个插件的介绍推荐你看我之前文章:WordPress代码片段插件 WPCode

通过插件实现

WordPress禁用或者是给设置Rest API 访问权限的权限有挺多的,这里我推荐三个,下面会对它们进行简单的描述,你可以根据我给出的描述和自己实际的需求进行选择:

Disable WP REST API

这个插件做了一件事:为没有登录WordPress的访问者禁用WP REST API。 无需配置。

此插件仅使用22行短代码(小于2KB)。 所以它是超轻量级、快速且高效。

如果你只是单纯的需要对于没有登录WordPress的访问者禁用WP REST API,那么就建议你使用这个插件即可。

WordPress插件库地址:Disable WP REST API – WordPress plugin | WordPress.org

Disable REST API

插件自己的描述是:用于控制对 WordPress REST API 访问的最全面的插件!

WordPress插件库地址:Disable REST API – WordPress plugin | WordPress.org

我用了下确实是不错,Disable REST API可以对不同的用户角色进行控制不空的权限,还可以对WordPress REST API进行节点的细分权限控制,安装后启用,在WordPress后台》设置》Disable REST API>进入到设置页面:

Disable REST API插件使用设置页面

WordPress REST API Authentication

WordPress REST API Authentication是一款给WordPress REST API增加身份验证的插件,也可以管理公开访问的节点,具体看下图吧:

WordPress REST API Authentication插件选择身份验证方式界面
WordPress REST API Authentication插件控制WordPress REST API开放节点界面

WordPress插件库地址:WordPress REST API Authentication – WordPress plugin | WordPress.org

我觉得一般应该是用不上的,WordPress从 5.6 开始,附带了应用程序密码的功能,使用这个应该就可以了,可以从编辑用户页面(wp-admin -> Users -> Edit User)生成。

WordPress用户设置应用程序密码界面

然后在请求的时候,设置为http请求头Authorization字段的参数:

curl简单示例,只需将 USERNAME、PASSWORD 和 HOSTNAME 换成它们各自的值::

curl --user "USERNAME:PASSWORD" https://HOSTNAME/wp-json/wp/v2/users?context=edit

相关资料

REST API Handbook | Developer.WordPress.org

Authentication – REST API Handbook | Developer.WordPress.org

给TA打赏
共{{data.count}}人
人已打赏
WordPress技巧

WordPress去除文章失效链接

2024-3-14 16:03:21

WordPress技巧WordPress教程

WordPress卡在维护页面(Maintenance)如何解决

2024-4-17 12:53:51

WordPress网站建设宣传图片
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
展开目录