From 68d13fc5b2303a9b020117f9385e7e96cefb5575 Mon Sep 17 00:00:00 2001 From: JontyLee <31982854+JontyLee@users.noreply.github.com> Date: Mon, 26 Oct 2026 20:49:21 +0800 Subject: [PATCH] =?UTF-8?q?fix(trimemedia):=20=E8=AE=BF=E9=97=AE=E7=A0=81?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E5=A4=B1=E8=B4=A5=E6=97=A5=E5=BF=97=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E8=AE=B0=E5=BD=95=E8=AE=BE=E5=A4=87=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit verify_access_code 把设备访问码拼进校验地址的路径段(/c/),一旦连不上 就把整条 URL 写进 error 日志,明文凭据随之落到实例日志文件里;404 与状态码两 个分支本来就不带访问码,这里补齐同一条边界:只记录设备根地址。 这是 #7157 之后对其余裸 {url} 日志点做完整评估时唯一确认会写入凭据的一处:其余 调用点记录的是站点根地址,或把 api_key 经 params 传递、URL 本身不含凭据。 --- app/modules/trimemedia/api.py | 3 ++- tests/test_trimemedia_coverage.py | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/app/modules/trimemedia/api.py b/app/modules/trimemedia/api.py index d0ac106c9..8f41d5ec6 100644 --- a/app/modules/trimemedia/api.py +++ b/app/modules/trimemedia/api.py @@ -285,7 +285,8 @@ class Api: url = f"{root}/c/{quote(self._access_code, safe='')}" res = self._request_utils.get_res(url, allow_redirects=True) if res is None: - logger.error(f"校验飞牛访问码失败,无法访问 {url}") + # 访问码是 URL 路径段而非查询参数,整串进日志等于泄露凭据 + logger.error(f"校验飞牛访问码失败,无法访问 {root}") return False if res.status_code == 404: # 访问码错误或校验失败时返回404 diff --git a/tests/test_trimemedia_coverage.py b/tests/test_trimemedia_coverage.py index 714dffa51..de5641aea 100644 --- a/tests/test_trimemedia_coverage.py +++ b/tests/test_trimemedia_coverage.py @@ -150,3 +150,24 @@ def test_module_image_cookies_returns_none_when_no_instance_owns_image(monkeypat assert module.mediaserver_image_cookies(image_url="https://other.example/poster.jpg") is None server.get_image_cookies.assert_called_once_with("https://other.example/poster.jpg") + + +def test_verify_access_code_failure_log_omits_access_code(monkeypatch): + """ + 访问码是校验地址的路径段,连接失败时日志只记录设备根地址。 + + :param monkeypatch: 隔离 HTTP 会话与日志输出 + """ + api = trimemedia_api.Api( + host="https://trimemedia.example/v", + apikey="apikey", + access_code="device-access-code", + ) + logs = Mock() + monkeypatch.setattr(trimemedia_api, "logger", logs) + monkeypatch.setattr(api._request_utils, "get_res", lambda *_args, **_kwargs: None) + + assert api.verify_access_code() is False + message = logs.error.call_args[0][0] + assert "device-access-code" not in message + assert "https://trimemedia.example" in message