【问题标题】:Restrict WordPress Rest API requests to my domain将 WordPress Rest API 请求限制到我的域
【发布时间】: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 看到它

【问题讨论】:

标签: wordpress wordpress-rest-api


【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2015-01-26
      • 1970-01-01
      • 2023-03-27
      • 2019-09-22
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      相关资源
      最近更新 更多