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

Rai*_*Man 4 wordpress wordpress-rest-api

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

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

如果我的自定义帖子类型(example.com)不是来自 mysite.com,则基本上防止它对其余 api 可见

joy*_*joy 6

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

 define( 'WP_HTTP_BLOCK_EXTERNAL', TRUE );
 define( 'WP_ACCESSIBLE_HOSTS', 'example.com, domain.com' );
Run Code Online (Sandbox Code Playgroud)

  • 为了能够更新来自“https://wordpress.org/themes/”的 WordPress 核心、插件和主题,请确保将“api.wordpress.org”添加到“WP_ACCESSIBLE_HOSTS”。如果您使用的主题**不是**托管在“https://wordpress.org/themes/”上,请联系主题作者并询问从中下载主题文件的域。 (2认同)

Vas*_*ikh 6

apply_filters( 'rest_authentication_errors', WP_Error|null|bool )
Run Code Online (Sandbox Code Playgroud)

过滤 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; 

}
Run Code Online (Sandbox Code Playgroud)