alleyinteractive/wp-rest-api-guard

限制和控制对REST API的访问

v1.3.2 2024-03-20 15:20 UTC

This package is auto-updated.

Last update: 2024-09-03 17:04:33 UTC


README

稳定标签: 1.3.2

最低要求: 6.0

测试到: 6.0

需要PHP: 8.0

许可证: GPL v2或更高版本

标签: alleyinteractive, rest-api-guard

贡献者: sean212

Coding Standards Testing Suite

限制和控制对REST API的访问。

安装

您可以通过composer安装此软件包

composer require alleyinteractive/wp-rest-api-guard

使用方法

WordPress REST API通常非常公开,可以匿名地与互联网共享大量信息。此插件旨在使限制对WordPress网站REST API的访问变得更容易。

默认情况下,此插件可以

  • 禁用对REST API的匿名访问。
  • 通过命名空间、路径等限制和控制对REST API的匿名访问。

设置页面

可以通过设置页面(设置 -> REST API Guard)或相关过滤器配置此插件。

Screenshot of plugin settings screen

防止访问用户信息(wp/v2/users

默认情况下,此插件将限制对用户端点的匿名访问。这可以在插件设置或代码中防止。

add_filter( 'rest_api_guard_allow_user_access', fn () => true );

防止访问索引(/)或命名空间端点(wp/v2

为了防止匿名用户浏览您的网站并发现已设置的插件/文章类型,此插件限制对索引(/)和命名空间(wp/v2)端点的访问。这可以在插件设置或代码中防止。

// Allow index access.
add_filter( 'rest_api_guard_allow_index_access', fn () => true );

// Allow namespace access.
add_filter( 'rest_api_guard_allow_namespace_access', fn ( string $namespace ) => true );

限制对REST API的匿名访问

此插件可以在插件设置或代码中限制对REST API的任何请求的匿名访问。

add_filter( 'rest_api_guard_prevent_anonymous_access', fn () => true );

限制对特定命名空间/路由(允许列表)的匿名访问

可以授予匿名用户仅对特定命名空间/路由的访问权限。超出这些路径的请求将被拒绝。这可以在插件设置或代码中配置。

add_filter(
	'rest_api_guard_anonymous_requests_allowlist',
	function ( array $paths, WP_REST_Request $request ): array {
		// Allow other paths not included here will be denied.
		$paths[] = 'wp/v2/post';
		$paths[] = 'custom-namespace/v1/public/*';

		return $paths;
	},
	10,
	2
);

限制对特定命名空间/路由(拒绝列表)的匿名访问

可以限制匿名用户对特定命名空间/路由的访问。这相当于一个匿名用户无法访问的特定路径的拒绝列表。路径支持正则表达式进行匹配。使用允许列表的优先级高于此拒绝列表。这可以在插件设置或代码中配置。

add_filter(
	'rest_api_guard_anonymous_requests_denylist',
	function ( array $paths, WP_REST_Request $request ): array {
		$paths[] = 'wp/v2/user';
		$paths[] = 'custom-namespace/v1/private/*';

		return $paths;
	},
	10,
	2
);

要求匿名用户通过JSON Web Token (JWT)进行身份验证

可以要求匿名用户通过JSON Web Token (JWT)进行身份验证才能访问REST API。用户应在请求中传递带有Authorization: Bearer <token>头的Authorization。这可以在插件设置或代码中配置。

add_filter( 'rest_api_guard_authentication_jwt', fn () => true );

默认情况下,此插件将在Authorization: Bearer <token>头中查找JWT。JWT应具有“wordpress-rest-api”的受众和站点的URL的发行者。这可以在插件设置或代码中配置。

add_filter( 'rest_api_guard_jwt_audience', fn ( string $audience ) => 'custom-audience' );

add_filter( 'rest_api_guard_jwt_issuer', fn ( string $issuer ) => 'https://example.com' );

JWT的秘密将自动生成并存储在rest_api_guard_jwt_secret选项中。秘密也可以通过代码过滤。

add_filter( 'rest_api_guard_jwt_secret', fn ( string $secret ) => 'my-custom-secret' );

允许对认证用户使用JWT身份验证

已验证用户可以通过JSON Web Token (JWT) 通过REST API进行验证。类似于匿名JWT身份验证,用户应在请求中传递一个 Authorization: Bearer <token> 标头。这可以在插件设置或代码中配置。

add_filter( 'rest_api_guard_user_authentication_jwt', fn () => true );

为匿名和已验证用户生成JWT

可以通过调用 wp rest-api-guard generate-jwt [--user=<user_id>] 命令或使用 Alley\WP\REST_API_Guard\generate_jwt() 方法来生成JWT。

$jwt = \Alley\WP\REST_API_Guard\generate_jwt(
	expiration: 3600, // Optional. The expiration time in seconds from now.
	user: 1, // Optional. The user ID to generate the JWT for. Supports `WP_User` or user ID.
);

测试

运行 composer test 来运行针对PHPUnit和插件中的PHP代码的测试。

变更日志

请参阅 变更日志 了解最近更改的更多信息。

致谢

该项目由 Alley Interactive 积极维护。喜欢您所看到的? 加入我们工作

Alley logo

许可证

GNU通用公共许可证 (GPL)。有关更多信息,请参阅 许可证文件