Replies: 1 comment
|
403 不是 bug,是内置安全护栏:部分 host API(目录浏览 listDirectory、settings 写入、agent-presets 创作等)在源码里标注为 loopback-only / loopback-pinned——只有来自本机回环地址的请求才放行,远程浏览器能加载静态页面,但触及这些特权接口会被拒。 三个可行姿势(按推荐排序):
短期判断:别尝试把 3080 直接暴露给局域网,特权 API 的钉扎是设计决策,绕过它不如隧道它。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
描述
环境信息
0.1.0-rc.6(npx @deepseek-ai/dsh web)问题现象
我在服务器上运行
dsh web,并尝试从同一局域网内的 Windows 设备通过浏览器访问http://<服务器IP>:3080。页面可以正常加载,但在选择工作区时,/api/host.listDirectory请求返回HTTP 403 Forbidden。控制台报错:预期行为
在可信内网环境中,用户应能够通过服务器 IP 地址访问 DSH Web GUI 并正常使用所有功能(包括选择工作区、列出目录等)
实际行为
页面静态资源可正常加载,但所有涉及文件系统操作的 API 请求(如
host.listDirectory)均被拒绝,返回 403复现步骤
http://<服务器IP>:3080/api/host.listDirectory请求返回HTTP 403 Forbidden根因分析
DSH 后端 API 有内置的安全中间件,会对请求的来源 IP 进行校验。只有来自
127.0.0.1或localhost的请求才能通过,来自非本机 IP(包括局域网 IP)的请求会被直接拦截。这与
--host 0.0.0.0的限制是同一安全设计的不同表现——即使绕过了启动时的绑定限制,API 层的 IP 校验依然会阻止非本机访问。临时解决方案
目前有两种可行的解决办法:
方案一:SSH 端口转发(推荐,最安全)
在 Windows 本地执行 SSH 隧道命令,将服务器的 3080 端口映射到本地:
然后在浏览器中访问
http://127.0.0.1:3080即可。此方式无需修改任何配置,全程加密,且不会触发 API 的 IP 校验。方案二:安装社区插件
dsh-lan-access在服务器上安装社区插件以解除 API 限制:
安装后重启服务即可通过
http://<服务器IP>:3080正常访问。建议的官方修复方向
--allow-network或--trusted-hosts的启动参数,让用户在明确知晓安全风险的前提下,允许来自可信内网的访问。"Access from non-loopback IP is blocked for security reasons"。dsh-lan-access插件的功能纳入官方支持:该插件已在社区得到验证,可考虑将其部分功能整合进官方版本。补充说明
这个问题与 #900 中讨论的
127.0.0.1vslocalhost的 403 问题有相似的安全校验机制,但触发场景不同——#900 是本地访问时的 Host/Origin 比较问题,而本问题是明确的非本机 IP 访问被拦截All reactions