将 WordPress Rest API 请求限制到我的域

Posted

技术标签:

【中文标题】将 WordPress Rest API 请求限制到我的域【英文标题】:Restrict WordPress Rest API requests to my domain 【发布时间】:2019-07-06 17:56:44 【问题描述】:

我有一个 WordPress 网站,我只用它来填充自定义帖子类型下的博客帖子和一些私人帖子。在另一个网站上,我使用 REST API 来显示帖子。如果我使用像 Postman 这样的软件,我可以显示来自 REST API 的数据。

如何防止对域 www.example.com 的任何未经授权的 REST API 请求?因此,如果请求不是来自 www.mysite.com,它会被阻止吗?

如果我的自定义帖子类型 (example.com) 不是来自 mysite.com,则基本上会阻止其他 api 看到它

【问题讨论】:

查看这个 WP REST API 身份验证v2.wp-api.org/guide/authentication 【参考方案1】:

您可以通过在 wp-config.php 中添加它来禁用外部请求(此外,您可以指定您不想像这样阻止的域)。

 define( 'WP_HTTP_BLOCK_EXTERNAL', TRUE );
 define( 'WP_ACCESSIBLE_HOSTS', 'example.com, domain.com' );

【讨论】:

为了能够更新来自https://wordpress.org/themes/ 的WordPress 核心、插件和主题,请确保将api.wordpress.org 添加到WP_ACCESSIBLE_HOSTS。如果您使用的主题不是托管在 https://wordpress.org/themes/ 上,请联系主题作者并询问下载主题文件的域。【参考方案2】:
apply_filters( 'rest_authentication_errors', WP_Error|null|bool )

过滤 REST 身份验证错误。将代码放入主题目录中的 functions.php 中。

完整描述:https://developer.wordpress.org/reference/hooks/rest_authentication_errors/

add_filter( 'rest_authentication_errors', 'wpse150207_filter_incoming_connections' );

function wpse150207_filter_incoming_connections( $errors )

    $allowed_ips = array( '127.0.0.1' );
    $request_server = $_SERVER['REMOTE_ADDR'];

    if( ! in_array( $request_server, $allowed_ips ) )
        return new WP_Error( 'forbidden_access', 'Access denied', array( 'status' => 403 ) );

    return $errors; 


【讨论】:

【参考方案3】:

限制 REST 请求的一种方法是使用优先级为 1 的rest_api_init 挂钩,并将所需的 IP 列入白名单。在此示例中,我仅限制对服务器本身的 REST 访问:

/**
*    Disables WordPress Rest API for external requests
*/
add_action('rest_api_init', function() 
    $whitelist = ['127.0.0.1', "::1"];

    if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist))
        die('REST API is disabled.');
    
, 1);

【讨论】:

以上是关于将 WordPress Rest API 请求限制到我的域的主要内容,如果未能解决你的问题,请参考以下文章

对 Wordpress REST API 的 POST 请求返回一个空对象

使用 WP-API 节点模块时如何限制返回的 Wordpress REST-API 字段

Wordpress REST API - 发送重置密码链接

javascript WordPress查询多种帖子类型(REST API),对REST API的请求 - 查询多个帖子类型并按ACF字段对数据排序

我可以将 REST API 用于托管在 WordPress.com 上的网站吗[关闭]

使用移动浏览器请求自定义帖子类型时出现 Wordpress REST API 404 错误