toshtag/fairux-linter

GitHub: toshtag/fairux-linter

FairUX Linter 是一款基于规则的可解释静态分析工具,用于检测界面中的暗黑模式和不公平 UX 设计,覆盖静态源码、实时 DOM 和 CI 流水线。

Stars: 0 | Forks: 0

# FairUX Linter FairUX 专门标记可能会向用户施压或误导用户的界面模式 —— **暗黑模式 (dark patterns)、误导性的订阅流程、隐藏费用、不公平的同意 UI、取消阻碍以及稀缺性施压**。它是**基于规则且可解释的**:每一项检测结果都会说明发现了什么、为什么重要以及如何修复 —— 不依赖 AI,无需猜测,完全在你的本地机器上运行。相同的规则可运行于**静态 HTML、实时页面 (浏览器) 以及 JSX/TSX 源码**,支持通过 **CLI**、**CI** (SARIF)、**浏览器扩展**和 **VS Code 扩展**调用。 ## 当前状态 FairUX 是本仓库中一个处于工作阶段的 beta 期引擎和工具链。SDK 和 CLI 软件包已准备好发布预览版,但尚未作为公开的 npm 版本进行验证。请参阅 [docs/status.md](docs/status.md) 了解当前的实现和路线图状态。 ## 快速开始 要求 **Node.js `^22.18.0 || >=24.11.0`**。仓库默认版本记录在 [`.node-version`](.node-version) 中。 ``` pnpm install pnpm build pnpm fairux scan examples/free-trial.html # Markdown (default) pnpm fairux scan examples/PricingCard.tsx # also scans JSX/TSX pnpm fairux scan examples/checkout.html --format json ``` ### npm 发布状态 `fairux@0.1.0-beta.1` 和 `@fairux/sdk@0.1.0-beta.1` 已配置好发布,但本仓库尚未完成公开的 npm beta 发布以及干净的注册表安装验证。在该版本发布之前,请使用上述的 workspace 命令,或使用从发布工作流中提取的受控打包 tarball。 外部 RulePack 作者可以基于 beta 创作工具包开始工作: [RulePack 创作](docs/rule-pack-authoring.md)、[RulePack 测试](docs/rule-pack-testing.md)、 [分类法迁移说明](docs/migrations/rule-pack-taxonomy-beta.1.md) 以及可复制的 [外部作者示例](examples/rule-pack-author)。第三方 RulePack 是受信任的可执行 JavaScript,而不是沙箱化的插件。 CLI 可以扫描**单个文件、目录、glob 模式和 stdin**。 传入 `--format sarif` 以供 CI 使用,传入 `--format json` 用于编程调用。 检测结果如下所示: ``` ## 高 ### 预选中的同意复选框 - **Rule:** `consent/checked-checkbox` - **Severity:** high **Confidence:** high - **What:** A checkbox is checked by default: "Email me product offers and promotions". - **Why it matters:** Pre-checked boxes opt users in without an active, informed choice. - **Recommendation:** Leave consent and marketing checkboxes unchecked so users opt in deliberately. - **Evidence:** - `#newsletter` — "Email me product offers and promotions" (free-trial.html:16) ``` 输出格式:**Markdown**(默认)、**JSON**(稳定且有文档说明的包装格式)和 **SARIF 2.1.0**(用于 GitHub 代码扫描)。`--include-experimental` 可开启启发式规则。 ## 检测范围 目前有 13 条规则(默认启用 11 条,2 条实验性)。所有规则均可解释;经过调优以保持低误报率(支持英语和日语短语): | 类别 | 规则 | | ---------------- | -------------------------------------------------------------------------------------- | | **同意 (Consent)** | 预选中的同意框 · 仅有同意而无明确拒绝选项 · 捆绑式(非颗粒度)同意 | | **订阅 (Subscription)** | 未披露续费信息的免费试用 CTA · 未包含取消条款的订阅 CTA | | **取消 (Cancellation)** | 没有取消途径的订阅/账户页面 | | **稀缺性 (Scarcity)** | 稀缺性 / 紧迫性短语 · 倒计时计时器 | | **隐藏费用 (Hidden cost)** | 显示价格时未披露税/运费/手续费(结账页面) | | **阻碍 (Obstruction)** | 没有关闭控件的模态框 · 强加负罪感(利用愧疚感诱导拒绝选项) | | **实验性 (Experimental)** | 接受/拒绝视觉不平衡 · 难以察觉的模态框关闭按钮(启发式,默认关闭) | 规则可针对特定项目进行调优或静默 —— 请参阅 [配置](#configuration)。 ## 在你的工作环境中使用 本仓库中已实现这些功能界面。公开包的安装取决于首次 npm beta 版本的发布。 ### CLI ``` pnpm fairux scan # .html → HTML; .tsx/.jsx/.ts/.js → JSX/TSX pnpm fairux scan --format json|sarif pnpm fairux scan --include-experimental ``` 适配器根据文件扩展名进行选择。JSX/TSX 扫描**仅限静态分析**:仅分析静态编写的直接 JSX 元素。JSX 表达式子节点 (`{cond &&
标签:Apache Flink, IPv6支持, MITM代理, 云安全监控, 代码规范检查, 内核驱动漏洞利用, 前端工程, 合规审查, 用户体验, 自动化攻击, 静态分析