feat: 添加插件身份绑定机制,防止伪造插件身份的 RPC 调用

This commit is contained in:
DrSmoothl
2026-03-13 15:40:14 +08:00
parent 44a9e9ecd7
commit f1e10b4054
3 changed files with 100 additions and 12 deletions

View File

@@ -186,12 +186,21 @@ class PluginRunner:
return
rpc_client = self._rpc_client
bound_plugin_id = plugin_id
async def _rpc_call(method: str, plugin_id: str = "", payload: dict = None) -> Any:
"""桥接 PluginContext.call_capability → RPCClient.send_request"""
"""桥接 PluginContext.call_capability → RPCClient.send_request
无论调用方传入何种 plugin_id实际发往 Host 的 plugin_id
始终绑定为当前插件实例,避免伪造其他插件身份申请能力。
"""
if plugin_id and plugin_id != bound_plugin_id:
logger.warning(
f"插件 {bound_plugin_id} 尝试以 {plugin_id} 身份发起 RPC已强制绑定回自身身份"
)
resp = await rpc_client.send_request(
method=method,
plugin_id=plugin_id,
plugin_id=bound_plugin_id,
payload=payload or {},
)
# 从响应信封中提取业务结果