fix: preserve browser form origins for update panel authentication

This commit is contained in:
Codex
2026-10-24 14:49:43 +08:00
parent 2f11a8c904
commit 9a198fe466
4 changed files with 76 additions and 1 deletions
+15
View File
@@ -52,6 +52,21 @@ DATA_DIR=/app/data
`PUBLIC_ORIGIN`不加结尾斜杠或路径,必须使用浏览器实际访问的HTTPS域名。可以自行修改ADMIN_USERNAME。密码以scrypt哈希保存;明文密码不写入APP或源码。SESSION_SECRET是更新后台自己的会话密钥,与APK签名密钥和反馈服务密钥无关。日后改密码时可重新运行工具并替换上述两行,重建服务使原登录失效。
如果登录提示“请求来源无效,请从本站更新后台提交”:旧版服务使用`Referrer-Policy: no-referrer`,会使浏览器正常表单POST也发送`Origin: null`,与后台的同源检查冲突。已修正为`same-origin`:同源表单保留来源,跨站不发送Referrer,来源与CSRF校验保持启用。将修正包内`update_service.py`覆盖原部署目录的同名文件,保留`.env`与数据卷,执行:
```sh
cd /opt/tpschedule-updates
docker compose up -d --build --force-recreate updates
```
重新打开`https://app.glowtps.cn/update`后再登录,不能继续提交更新前已打开的旧页面。如果仍提示来源无效,只查看容器的公开域名配置(不打印密码或会话密钥):
```sh
docker compose exec updates python -c 'import os; print(os.environ.get("PUBLIC_ORIGIN"))'
```
输出必须是`https://app.glowtps.cn`(无路径、无末尾斜杠,不是内部HTTP地址);访问地址也必须使用这个HTTPS域名。确认雷池/OpenResty没有覆盖`Origin`请求头或追加旧的`Referrer-Policy: no-referrer`,且不缓存后台页面。不要硬编码伪造`Origin`、放行`null`或关闭CSRF校验。
### 3. 启动并检查容器
```sh