open-code-review Viewer 安全详解:DNS Rebinding防御与安全头加固指南 open-code-review Viewer 安全详解DNS Rebinding防御与安全头加固指南【免费下载链接】open-code-reviewFast, efficient, battle-tested at Alibabas scale. Hybrid architecture code review tool: deterministic pipelines LLM Agent, precise line-level comments, built-in multi-language ruleset (NPE, thread-safety, XSS, SQL injection), OpenAI Anthropic compatible.项目地址: https://gitcode.com/GitHub_Trending/op/open-code-reviewopen-code-reviewOCR的Viewer是一个内嵌的 Web 会话查看器用浏览器浏览历史代码审查记录。正因为它会把被审查的源代码和LLM 分析结果渲染到网页上本地 Viewer 的安全设计格外关键。本文将从新手视角讲清楚Viewer 是如何防御DNS Rebinding 攻击的又设置了哪些安全响应头让你可以安心地开启它。为什么本地审查 Viewer 需要安全防御很多开发者直觉上认为ocr viewer只监听本机端口外人访问不到自然安全。但现实中有个隐藏漏洞 ️Viewer 展示的会话 JSONL 里包含完整的 diff 源码和发给 LLM 的请求内容攻击者只需要让你打开他的一枚恶意网页网页里的脚本就能悄悄向127.0.0.1发起请求由于请求来自你自己的浏览器同源策略形同虚设——这就是经典的DNS RebindingDNS 重绑定攻击。官方文档中也明确说明了这一防护设计见 pages/src/content/docs/en/viewer.md。DNS Rebinding 攻击原理攻击者页面如何偷看本地数据攻击链其实很短攻击者注册域名evil.com让它的 DNS 记录指向127.0.0.1你打开evil.com页面上的 JS 请求http://evil.com:5483/——浏览器按 DNS 解析实际访问的是你本机的 Viewer关键细节此时 HTTP 请求的Host头里写的是evil.com而不是localhost浏览器认为同源恶意脚本顺利读到会话内容。防御的核心思路因此非常直接在服务器端校验Host头不认识的主机名一律拒绝✅hostGuardHost 头白名单的防御设计实现位于 internal/viewer/hostguard.go核心是一个hostGuard中间件工作方式如下环节做了什么防住了什么hostOnly解析剥离端口、小写化、处理 IPv6 方括号对带多个冒号的裸 IPv6 直接判为无效各种畸形 Host 头绕过回环地址放行localhost、127.0.0.0/8、::1永远允许保证本机正常使用不受影响白名单匹配不在白名单 → 返回403 forbidden host拦截evil.com这类攻击者域名白名单如何构建buildAllowedHosts函数默认只含三个回环名localhost、127.0.0.1、::1具体绑定地址自动加入如果你执行ocr viewer --addr 192.168.1.10:5483这个 IP 会被自动放行局域网同事可以访问通配符绑定:3000、0.0.0.0、::刻意不自动放行——这是有意为之暴露到公网/局域网属于高风险操作强制你通过环境变量OCR_VIEWER_ALLOWED_HOSTS逗号分隔主机名显式声明允许哪些主机等于逼你确认风险后才生效。对应测试用例覆盖了典型攻击场景见 internal/viewer/hostguard_test.go攻击者域名、带端口的伪造、169.254.169.254元数据地址、公网 IP 重绑定全部被 403 拦截。安全响应头每一层都在补位除了 Host 校验Viewer 还对每个响应叠加一层防御纵深头实现在 internal/viewer/securityheaders.go响应头取值作用Content-Security-Policydefault-src self; script-src self; ...只允许加载本站资源且不含unsafe-inline——即使某段用户/LLM 内容突破了模板转义也无法注入脚本X-Content-Type-Optionsnosniff禁止浏览器猜测MIME 类型X-Frame-OptionsDENY禁止页面被 iframe 嵌套防点击劫持Referrer-Policyno-referrer绝不向外泄露来源地址Permissions-Policy禁用地理位置/摄像头/麦克风关闭与审查业务无关的浏览器权限 一个值得学习的细节HSTS 被刻意省略。因为 Viewer 只在回环地址上提供纯 HTTPHSTS 在此毫无意义反而会错误地把浏览器钉在 localhost 上——代码注释里写明了这个取舍见 internal/viewer/securityheaders.go#L23-L27。中间件挂载顺序与快速上手建议在 internal/viewer/server.go#L53-L61 中两层防御的嵌套顺序是securityHeaders( hostGuard( 路由 ) )即先过 Host 白名单再过安全头攻击请求在入口就被挡下。给新手的三条实践建议 默认用法最安全直接ocr viewer绑定localhost:5483白名单天然收敛局域网共享用具体 IP 绑定--addr 192.168.x.x:5483该地址自动放行通配符绑定务必设置OCR_VIEWER_ALLOWED_HOSTSbox.local,192.168.1.10否则局域网内其他主机访问会收到 403。总结open-code-review 的 Viewer 用一套小而精的设计守住了本地审查数据的边界hostGuard以默认拒绝的 Host 白名单把 DNS Rebinding 攻击挡在门外并用通配符绑定不自动放行的设计强制使用者确认风险securityHeaders叠加 CSP、防点击劫持、权限最小化等响应头形成多层防线每一处取舍比如不加 HSTS都有清晰注释说明理由——这正是新手学习 Web 安全设计的好范本 output文章结束 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章 /输出文章【免费下载链接】open-code-reviewFast, efficient, battle-tested at Alibabas scale. Hybrid architecture code review tool: deterministic pipelines LLM Agent, precise line-level comments, built-in multi-language ruleset (NPE, thread-safety, XSS, SQL injection), OpenAI Anthropic compatible.项目地址: https://gitcode.com/GitHub_Trending/op/open-code-review创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考