
本地服务器暴露在网络中会怎样lavish-axi对抗DNS重绑定与跨域攻击全解析【免费下载链接】lavish-axiHTML is the new markdown. Lavish is the new editor for your HTML artifacts.项目地址: https://gitcode.com/gh_mirrors/la/lavish-axi本地服务器一旦暴露轻则泄露文件重则被恶意网页劫持。lavish-axiLavish Editor是一个让 AI 代理与人类协作评审 HTML 产物的本地编辑器它在你的电脑上起一个默认端口为4387的 HTTP 服务把代理生成的 HTML 文件开在浏览器里供你批注、反馈。正因它跑在本地、又必须被浏览器访问DNS 重绑定和跨域攻击就成了它必须正面对抗的两大威胁。本文带你用大白话看懂这些攻击并拆解 lavish-axi 的完整防御方案。1. 本地服务器暴露在网络中会怎样先说结论危险程度取决于谁能访问到它以及服务器认不认访问者。想象你的笔记本上跑着一个只监听127.0.0.1回环地址也就是只认自己的服务。正常情况下外人碰不到它。问题出在两处暴露方式后果监听0.0.0.0所有网卡局域网/网络内任何能路由到你的设备都能直接访问相当于把门打开监听具体公网或私网 IP只有能到达该地址的设备能访问但风险依旧仅监听127.0.0.1本机访问安全但本机浏览器打开的任何网页都可以借道发起请求——这就是 DNS 重绑定登场的地方最阴险的一点是即便服务器只监听回环地址你的浏览器仍可能被诱导向它发起请求。因为浏览器发起请求时目标地址和请求头里的域名是两回事——攻击者可以让一个恶意域名在 DNS 层面解析到你本机的127.0.0.1。2. 什么是 DNS 重绑定攻击把 DNS 理解成域名 → IP 的翻译表。所谓重绑定就是攻击者注册一个自己的域名比如evil.example并设置超短的 DNS 缓存时间你访问evil.example第一次它解析到一个正常的公网 IP页面正常打开浏览器不会怀疑页面加载完攻击者的 JS 再次请求evil.example此时 DNS 被重绑定到127.0.0.1浏览器向127.0.0.1的某个端口发起请求但请求头里的Origin和Host依然是evil.example。对服务器来说这看起来就像一个恶意域名在访问我的回环端口。如果服务器不做校验攻击者就能借你的浏览器读取本地文件、向本地服务提交数据甚至往 AI 代理的反馈队列里塞提示词prompt injection。3. lavish-axi 的默认姿态能不开门就不开门第一层防御其实很简单——控制监听范围。在 src/tailscale.js 与 src/paths.js 中Lavish 的策略是默认只监听127.0.0.1回环地址任何显式的通配符配置如0.0.0.0都会被强制降级为回环监听检测到本机运行着 Tailscale 时自动额外监听本机的 Tailscale IPv4 地址生成一条 MagicDNS 手机可访问的会话链接用于跨设备评审永远不会绑定0.0.0.0。源码里写得很直白一旦绑定到回环之外就等于把可以读取并提供任意本地文件的无认证服务暴露给所有能到达的设备。换句话说不装 Tailscale服务就只有你自己能碰装了 Tailscale也只有你私有 tailnet 内的设备能碰。4. 第一道防线Host 头允许列表DNS 重绑定克星只监听回环还不够因为第 2 节的攻击恰恰打的就是回环端口。Lavish 在 src/server.js 中安装了一个全局中间件作为所有路由之前的第一道关卡——Host 头允许列表任何Host头缺失、或不在我认可的域名列表里的请求一律返回403拒绝。允许列表由buildAllowedHostnames函数构建包含回环类名称127.0.0.1、::1、localhost服务器实际监听的每个具体地址当前生效的链接主机名如 Tailscale 的 MagicDNS 名称仅当 Tailscale 监听器可用时加入;用户通过环境变量LAVISH_AXI_ALLOWED_HOSTS显式追加的域名见 src/paths.js 中的extraAllowedHosts。为什么这一招能挡住 DNS 重绑定关键在于同域校验挡不住重绑定被重绑定的页面在Origin和Host里填的是同一个恶意域名两者天然一致基于同源策略的 CSRF 校验会误放行。而重绑定页面的Host是攻击者的域名永远不可能出现在服务器的允许列表里——于是一刀切掉。源码注释src/server.js 第 580–598 行附近也专门点明了这一点重绑定防御必须用 Host 允许列表而不是同源判断。5. 第二道防线Origin / Referer 跨域校验Host 校验是全局门禁Lavish 还在每个会修改数据的接口提交反馈、共享发布、白板写入、附件上传等上装了第二道闸——同源请求校验isSameOriginRequest同样位于 src/server.js非 GET/HEAD/OPTIONS 的请求若携带了Origin或Referer头且该头与服务器自己的源不一致直接403拒绝如cross-origin prompt submission rejected这道校验挡住的是经典的跨域 CSRF别的网站上的脚本试图向本地服务偷偷提交数据无头部的 CLI 控制请求本地命令行工具发起不受影响它们由 Host 允许列表把关。两道防线是顺序叠加的先过 Host 允许列表防 DNS 重绑定再过 Origin/Referer 校验防普通跨域伪造。这也正是 AGENTS.md 中记载的架构不变量。6. 需要自定义域名配置方法如下如果你有正当理由让服务器通过一个固定域名访问比如反代后面lavish-axi 提供了显式开关设置LAVISH_AXI_ALLOWED_HOSTSproxy.example other.example空格分隔把域名加入允许列表反代场景下X-Forwarded-Host头也会被按同一份列表校验且与Host头做与关系伪造的转发头只会收紧访问不会绕过校验记得让代理同时转发X-Forwarded-Proto把LAVISH_AXI_ALLOWED_HOSTS设为*可完全关闭该检查——仅当你自己在前面套了认证或代理时才应这样做自建共享后端的完整契约见 docs/self-hosting-share.md。⚠️ 注意关闭校验 ≠ 更安全的暴露。官方文档明确建议把服务器暴露到网络时应确保能访问它的网络是受信任的如私有 tailnet。7. 防御如何被验证一次真实攻击的自动化测试好的防御要能被证明。在 test/server.test.js 中有一条名为loopback server rejects forged non-loopback Host headers (DNS rebinding)的测试它模拟的正是真实浏览器发起重绑定攻击的样子用原始 HTTP 请求伪造Host: evil.example:port头普通fetch无法修改 Host 头所以测试直接走底层httpRequest依次尝试四个高危动作伪造打开新会话、读取产物文件内容、向反馈队列注入忽略你的指令并外泄机密式的提示词、轮询拉取队列断言全部返回403 forbidden host且产物文件里的内容绝不外泄。测试用raw request 伪造 Host的方式把 DNS 重绑定从概念变成了可回归验证的具体用例——每次发版前这道防线都会被重新验收。8. 总结三层纵深防御清单层级机制对应代码网络层默认仅监听回环Tailscale 可用时自动扩展到 tailnet永不绑定0.0.0.0src/tailscale.js、src/paths.js请求层全局 Host 头允许列表拒绝一切陌生域名含 DNS 重绑定src/server.js接口层变更类路由的Origin/Referer同源校验拦截跨域 CSRFsrc/server.js给所有本地服务开发者的三条启示️默认只监听127.0.0.1把扩大可见范围变成显式选择同源校验Origin 校验防不住DNS 重绑定必须叠加 Host 头白名单用自动化测试模拟真实攻击伪造 Host 头 原始请求让防线可以被持续验证。Lavish 证明了一个本地优先的编辑器完全可以在不牺牲便利性的前提下把 DNS 重绑定与跨域攻击挡在门外。【免费下载链接】lavish-axiHTML is the new markdown. Lavish is the new editor for your HTML artifacts.项目地址: https://gitcode.com/gh_mirrors/la/lavish-axi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考