[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-70500":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":25,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":41,"readmeContent":42,"aiSummary":43,"trendingCount":16,"starSnapshotCount":16,"syncStatus":15,"lastSyncTime":44,"discoverSource":45},70500,"stackprism","setube\u002Fstackprism","setube","StackPrism是一款用于检测网页技术栈的浏览器插件。","https:\u002F\u002Fstackprism.wenzi.games\u002F",null,"TypeScript",715,50,3,2,0,18,53,330,54,9.12,"Other",false,"main",true,[27,28,29,30,31,32,33,34,35,36,5,37,38,39,40],"advertising-detection","analytics-detection","browser-extension","cdn-detection","chrome-extension","cms-detection","edge-extension","manifest-v3","saas-detection","security-research","tech-stack","technology-detection","technology-detector","web-technology","2026-06-12 02:02:34","\u003Cdiv align=\"center\">\n\n\u003Cimg src=\"public\u002Ficons\u002Ficon256.png\" alt=\"StackPrism \u002F 栈棱镜\" width=\"160\" height=\"160\" \u002F>\n\n[![Chrome Web Store](https:\u002F\u002Fimg.shields.io\u002Fchrome-web-store\u002Fv\u002Fcagpdifljieeiajlhlcboelglkalofak?label=Chrome%20Web%20Store)](https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Fstackprism\u002Fcagpdifljieeiajlhlcboelglkalofak)\n[![License: CC BY-NC-SA 4.0](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-CC%20BY--NC--SA%204.0-blue)](https:\u002F\u002Fcreativecommons.org\u002Flicenses\u002Fby-nc-sa\u002F4.0\u002F)\n[![Manifest V3](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FManifest-V3-4CAF50)](https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fextensions\u002Fdevelop\u002Fmigrate\u002Fwhat-is-mv3)\n[![Platform](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPlatform-Chrome%20%7C%20Edge-26A69A)](#上手使用)\n[![PRs welcome!](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPRs-Welcome-FF6F61)](https:\u002F\u002Fgithub.com\u002Fsetube\u002Fstackprism\u002Fissues)\n\n# StackPrism \u002F 栈棱镜 —— 网页技术栈识别浏览器扩展\n\n> 从页面运行时、DOM、资源 URL、响应头、动态加载和源码版权注释 6 个维度收集线索,把站点用的前后端栈分门别类列清楚。\n\n[简介](#简介) • [功能特性](#功能特性) • [规则维护](#规则维护) • [注意事项](#注意事项) • [参与共建](#参与共建) • [赞助者](SPONSORS.md) • [星标趋势](#星标趋势) • [开源协议](#开源协议)\n\n\u003C\u002Fdiv>\n\n## 简介\n\nStackPrism(以下简称 **栈棱镜**)是一款基于 **Chrome \u002F Edge Manifest V3** 的网页技术栈识别扩展。\n\n不同于市面上多数只看 HTML 资源 URL 的同类工具,栈棱镜把检测拆成 4 个独立通道并行收集线索:\n\n- **静态扫描**:页面加载时由注入脚本扫 DOM、全局变量、CSS 类名、CSS 变量、`\u003Cmeta>`\n- **响应头观察**:Service Worker 监听 `webRequest.onHeadersReceived`,捕获主文档\u002FXHR\u002Fiframe 的响应头与 HTTP 版本\n- **动态资源监听**:content script 用 `PerformanceObserver` + `MutationObserver` 累积页面交互后新加载的脚本\u002F样式\u002Fiframe\u002Ffeed\n- **JS 版权注释扫描**:后台异步抓主 bundle 的开头版权注释,识别打包进 `index\u002Fmain\u002Fvendor` chunk 的第三方依赖\n\n4 路结果合并去重后,按 50+ 个类目分组展示,并对**伪造响应头、自指检测、模糊误报**等场景做了主动收敛。\n\n### 技术特性\n\n- **MV3 service worker 架构**:无后台常驻进程,事件驱动,内存占用低\n- **规则即数据**:50+ 个 JSON 规则文件(`public\u002Frules\u002F`)集中维护,构建期预编译 hint prefilter 与 keyword 合并正则,运行时只跑命中候选\n- **伪造检测**:响应头里同时出现 ≥4 种主体身份字段(`server`、`x-aspnet-*`、`x-drupal-*`、`x-powered-cms`、`x-varnish` 等),或 `server` 字段拼了多个产品,自动降级所有相关类目的置信度并附警示\n- **自指抑制**:身在 github.com \u002F x.com \u002F npmmirror.com 等 50+ 主流站点时,自动不再把同名服务列为\"使用的技术\"\n- **HTTP 版本识别**:从 `webRequest.statusLine` 提取真实协商版本,绕开跨域 `Timing-Allow-Origin` 限制\n\n### 识别覆盖\n\n| 维度   | 类目示例                                        |\n| ------ | ----------------------------------------------- |\n| 前端   | 前端框架 \u002F UI 框架 \u002F 前端库 \u002F 构建与运行时      |\n| 服务端 | Web 服务器 \u002F 后端框架 \u002F CDN 与托管 \u002F 开发语言   |\n| 内容   | 网站程序 \u002F 主题模板 \u002F CMS \u002F 电商平台 \u002F RSS      |\n| 第三方 | SaaS \u002F 探针监控 \u002F AI 大模型 \u002F 第三方登录 \u002F 支付 |\n| 营销   | 广告 \u002F 营销 \u002F 统计 \u002F 分析 \u002F 标签管理            |\n| 安全   | HTTPS \u002F HTTP\u002F2 \u002F HTTP\u002F3 \u002F CSP \u002F Cookie 同意     |\n\n### 安装\n\n**从源码加载**(开发模式):\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fsetube\u002Fstackprism.git\ncd stackprism\npnpm install\npnpm run build\n```\n\n1. 打开 `chrome:\u002F\u002Fextensions` 或 `edge:\u002F\u002Fextensions`\n2. 右上角开启「开发者模式」\n3. 点「加载已解压的扩展程序」,选刚才构建出的 `dist\u002F` 目录\n4. 访问任意网页,扩展图标显示识别数量\n\n### 开发\n\n```bash\npnpm run dev          # 开发模式 + HMR\npnpm run typecheck    # vue-tsc 类型检查\npnpm run lint         # ESLint\npnpm run build        # 生产构建(含规则预编译)\npnpm run docs:dev     # VitePress 文档站本地预览\n```\n\n## 规则维护\n\n栈棱镜的规则系统是数据驱动的——绝大多数检测改规则 JSON 即可,无需碰代码。\n\n- **加载清单**:[public\u002Frules\u002Findex.json](public\u002Frules\u002Findex.json) 列出所有要加载的规则文件\n- **页面规则**:`public\u002Frules\u002Fpage\u002F*.json` 处理页面源码、DOM、资源 URL、动态资源\n- **响应头规则**:`public\u002Frules\u002Fheaders\u002F*.json` 处理服务端响应头与 Cookie\n- **自指抑制**:[public\u002Frules\u002Fself-host-suppress.json](public\u002Frules\u002Fself-host-suppress.json) 当用户在某主流站点上时跳过同名识别\n- **技术链接**:[public\u002Ftech-links.json](public\u002Ftech-links.json) 集中维护技术名 → 官网\u002F仓库 URL 的映射,识别结果可点击跳转\n- **构建期 prefilter**:[vite.config.ts](vite.config.ts) 的 `precompileRulesPlugin` 在 `closeBundle` 阶段为每条 leaf rule 注入 `__hints`(最长 literal 段去重排序取前 3)和 `__keywordCombined`(keyword 合并正则),运行时 `rule-matcher.ts` 优先用它们做候选过滤\n\n新规则的字段:\n\n```jsonc\n{\n  \"name\": \"技术名称\",\n  \"category\": \"前端框架\", \u002F\u002F 50+ 类目之一\n  \"patterns\": [\"正则或关键词\"],\n  \"matchType\": \"regex\", \u002F\u002F 或 \"keyword\"\n  \"matchIn\": [\"html\", \"resources\", \"url\", \"headers\", \"dynamic\"],\n  \"confidence\": \"高\", \u002F\u002F 高 \u002F 中 \u002F 低\n  \"kind\": \"类型说明\",\n  \"selectors\": [\"CSS 选择器\"],\n  \"globals\": [\"window 全局变量名\"],\n  \"classPrefixes\": [\"类名前缀\"]\n}\n```\n\n### 规则质量约束\n\n- 优先用**高特征信号**:响应头、专属资源 URL、`\u003Cmeta name=\"generator\">`、`window.\u003Cglobal>`、独家 CSS 选择器、JS 版权注释、官方 SDK 包名\n- 避免短或过宽的 keyword(`spring` \u002F `phoenix` \u002F `column` \u002F `container` 这些会命中竞品讨论、Bootstrap 与 Tailwind 通用类)\n- 优先限定 `matchIn`,**优先** `resources` \u002F `url` \u002F `headers` 而不是裸 `html`,减少正文误报\n\n## 注意事项\n\n- **后端识别不保证完整**:很多站点隐藏 `Server` \u002F `X-Powered-By` 等响应头,后端结果会以\"线索 + 置信度\"形式展示\n- **伪造响应头**:扩展会主动识别 ≥4 种主体身份字段同时存在的伪造场景,将相关类目降级为低置信度并附警示。但单个伪造头无法识别,建议结合其他线索判断\n- **首次安装请刷新目标页**:让 service worker 捕获主文档响应头\n- **源代码搜索是 DOM 快照**:基于当前页面的 `outerHTML`,不等同于服务器最初返回的原始 HTML\n- **Chrome 系统页 \u002F 商店页 \u002F 内置页**通常不允许注入检测脚本\n- **动态监控异步累积**:content script 在后台累计交互后新加载的资源,重新打开 popup 可看到合并结果\n\n## 参与共建\n\n栈棱镜目前内置 50+ 类目下 2000+ 条识别规则,但前端生态变化快,**新框架、新 SaaS、新规则误报**都欢迎参与:\n\n- **Bug \u002F 误识 \u002F 漏识反馈**:[Issues](https:\u002F\u002Fgithub.com\u002Fsetube\u002Fstackprism\u002Fissues) — popup 上直接点「识别不准确」按钮会自动填好议题模板\n- **规则贡献**:扩展设置页点「提交规则贡献」,或直接 PR 到 [`public\u002Frules\u002F`](public\u002Frules\u002F)\n- **讨论与提案**:[Discussions](https:\u002F\u002Fgithub.com\u002Fsetube\u002Fstackprism\u002Fdiscussions)\n\n提交代码前请跑 `pnpm run typecheck && pnpm run lint && pnpm run build` 三个检查全过。\n\n## 星标趋势\n\n如果觉得有帮助,欢迎点 Star 让更多人看到这个项目。\n\n\u003Cimg src=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=setube\u002Fstackprism&type=Date\" style=\"width: 60%; height: auto;\" alt=\"Star History\">\n\n## 开源协议\n\n本项目基于 [CC BY-NC-SA 4.0](https:\u002F\u002Fcreativecommons.org\u002Flicenses\u002Fby-nc-sa\u002F4.0\u002F) 协议授权 —— **允许非商业自由使用与二次修改,必须署名且衍生作品采用同一协议**。完整法律文本见 [LICENSE](LICENSE)。\n","StackPrism 是一款用于检测网页技术栈的浏览器插件。它通过静态扫描、响应头观察、动态资源监听和JS版权注释扫描四个独立通道并行收集线索，能够识别包括前端框架、后端服务、CDN、CMS、第三方服务、营销工具及安全设置等在内的50多个类目的技术使用情况。基于Chrome\u002FEdge Manifest V3架构开发，采用MV3 service worker设计，具有低内存占用、高效事件驱动的特点，并且支持规则数据化管理，便于维护更新。此外，StackPrism还具备伪造响应头检测、自指抑制等功能以提高准确性。该工具非常适合开发者、产品经理或安全研究人员在进行竞品分析、安全审计和技术调研时使用。","2026-06-11 03:32:32","CREATED_QUERY"]