将 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 字段
javascript WordPress查询多种帖子类型(REST API),对REST API的请求 - 查询多个帖子类型并按ACF字段对数据排序