{"id":49759157,"url":"https://github.com/setube/stackprism","last_synced_at":"2026-05-14T13:02:15.610Z","repository":{"id":356560169,"uuid":"1232897321","full_name":"setube/stackprism","owner":"setube","description":"StackPrism是一款用于检测网页技术栈的浏览器插件。","archived":false,"fork":false,"pushed_at":"2026-05-13T10:12:30.000Z","size":10468,"stargazers_count":445,"open_issues_count":0,"forks_count":28,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-05-13T12:03:56.946Z","etag":null,"topics":["advertising-detection","analytics-detection","browser-extension","cdn-detection","chrome-extension","cms-detection","edge-extension","manifest-v3","saas-detection","security-research","stackprism","tech-stack","technology-detection","technology-detector","web-technology"],"latest_commit_sha":null,"homepage":"https://stackprism.wenzi.games/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/setube.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":["https://afdian.com/a/setube","https://github.com/setube/stackprism/blob/main/SPONSORS.md"]}},"created_at":"2026-05-08T11:40:48.000Z","updated_at":"2026-05-13T11:41:56.000Z","dependencies_parsed_at":"2026-05-13T12:00:58.116Z","dependency_job_id":null,"html_url":"https://github.com/setube/stackprism","commit_stats":null,"previous_names":["setube/stackprism"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/setube/stackprism","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/setube%2Fstackprism","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/setube%2Fstackprism/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/setube%2Fstackprism/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/setube%2Fstackprism/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/setube","download_url":"https://codeload.github.com/setube/stackprism/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/setube%2Fstackprism/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33026049,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"online","status_checked_at":"2026-05-14T02:00:06.663Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["advertising-detection","analytics-detection","browser-extension","cdn-detection","chrome-extension","cms-detection","edge-extension","manifest-v3","saas-detection","security-research","stackprism","tech-stack","technology-detection","technology-detector","web-technology"],"created_at":"2026-05-11T02:59:48.309Z","updated_at":"2026-05-14T13:02:15.566Z","avatar_url":"https://github.com/setube.png","language":"TypeScript","funding_links":["https://afdian.com/a/setube","https://github.com/setube/stackprism/blob/main/SPONSORS.md"],"categories":["TypeScript"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"public/icons/icon256.png\" width=\"128\" height=\"128\" alt=\"StackPrism 栈棱镜图标\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eStackPrism / 栈棱镜\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e一个用于检测网页技术栈线索的 Chrome / Edge Manifest V3 浏览器扩展。\u003c/p\u003e\n\nStackPrism会从页面运行时、DOM、资源 URL、响应头、动态加载资源和源码快照中收集线索，并按分类展示检测结果。\n\n## 功能\n\n- 主动后台识别：页面加载和动态资源变化时自动检测，并在扩展图标上显示识别数量。\n- 快速弹窗展示：打开弹窗时优先展示后台缓存结果，点击“刷新”时才重新执行完整扫描。\n- 分类结果展示：按前端框架、前端库、UI / CSS 框架、构建与运行时、CDN / 托管、Web 服务器、后端 / 服务器框架、开发语言 / 运行时、网站程序、主题 / 模板、网站源码线索、探针 / 监控、RSS / 订阅、CMS / 电商平台、SaaS / 第三方服务、AI / 大模型、第三方登录 / OAuth、支付系统、广告 / 营销、统计 / 分析、安全与协议等类别过滤结果。\n- 动态页面监控：页面交互后新增的脚本、样式、iframe、资源和关键 DOM 标记会被持续记录并合并到检测结果。\n- WordPress 主题信息：发现主题目录后会尝试读取主题 `style.css` 文件头，展示主题名称、版本、作者、父主题和官网线索。\n- 技术名称跳转：检测结果里的技术名称可点击，优先跳转到官网或官方仓库。\n- 网页源代码搜索：支持在当前页面 DOM 源码快照中搜索，包含区分大小写、全字匹配和正则表达式选项。\n- 设置页：支持开启 / 关闭指定识别类别、隐藏指定技术、自定义规则、自定义匹配范围、自定义技术链接和自定义 CSS。\n- 自定义规则校验：保存前会检查规则 JSON、正则表达式、CSS 选择器、字段格式和数量限制，并给出错误提示。\n- 规则贡献入口：设置页可直接打开规则贡献议题模板，方便补充新的检测规则。\n- 使用说明页：提供面向新手的规则填写教程和示例。\n- 结果复制：支持复制完整 JSON 检测结果。\n\n## 规则维护\n\n- 可枚举规则集中放在 `rules/` 目录，`rules/index.json` 是加载清单，`rules/page/*.json` 负责页面源码、DOM、资源和动态变化线索，`rules/headers/*.json` 负责响应头线索。\n- 技术名称到官网 / 仓库的链接集中放在 `tech-links.json`；如果新增规则后希望技术名可点击，也在这里补同名链接。\n- 需要执行浏览器 API 或 DOM 深度判断的检测仍保留在 `page-detector.js` / `background.js`；可枚举规则优先放到 `rules/` 对应分类文件。\n- 动态资源监听逻辑放在 `content-observer.js`，它只记录 URL、feed 链接和有限 DOM 标记，后台再用 `rules/` 里的规则做动态识别。\n- 新增规则时优先改 `rules/` 下对应分类 JSON：添加 `name`、`patterns`，需要时补 `kind`、`confidence`、`globals`、`selectors`、`classPrefixes`；如果一批规则公共字段重复，可以用 `defaults + rules` 规则组减少重复；如果新增了文件，要把路径加入 `rules/index.json`。\n- 不想改内置规则时，可以在扩展设置页添加自定义规则；每条规则支持 `patterns`、`selectors`、`globals`、`matchIn`、`matchType`、`category`、`confidence` 和技术链接。\n- 修改扩展运行文件时同步提升 `manifest.json` 里的 `version`；规则、弹窗、设置页、后台脚本、内容脚本和图标资源更新都按插件版本更新处理。\n\n## 安装\n\n1. 打开 Chrome 或 Edge 的扩展管理页面。\n2. 开启“开发者模式”。\n3. 选择“加载已解压的扩展程序”。\n4. 选择本目录；克隆仓库后目录通常为 `stackprism`。\n5. 打开任意网页后点击扩展图标查看检测结果。\n\n## 注意\n\n- 浏览器扩展无法保证识别所有后端技术。很多站点会隐藏 `Server`、`X-Powered-By` 等响应头，后端结果会以“线索”和“置信度”的方式展示。\n- “自定义 / 私有 CDN”是启发式结果，用于捕获区域厂商、企业自建 CDN、对象存储加速域名和未被明确枚举的 CDN 域名。\n- 网站程序和开发语言多数只能通过资源路径、Cookie 名称、响应头和 DOM 标记推断，置信度会按线索强弱区分。\n- 首次安装后，建议刷新目标网页再打开扩展，这样后台脚本可以捕获主文档响应头。\n- 源代码搜索使用的是当前页面的 DOM `outerHTML` 快照，不等同于服务器最初返回的未执行脚本前 HTML。\n- Chrome 系统页面、扩展商店页面、浏览器内置页面通常不允许注入检测脚本。\n- 浏览器 action popup 在用户点击网页时通常会关闭；动态监控由内容脚本在后台累计，重新打开插件即可看到页面交互后的合并结果。\n\n## 开源协议\n\n本项目基于 [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)](https://creativecommons.org/licenses/by-nc-sa/4.0/) 协议授权，完整法律文本见 [LICENSE](LICENSE)。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsetube%2Fstackprism","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsetube%2Fstackprism","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsetube%2Fstackprism/lists"}