JMousqueton/canipay

GitHub: JMousqueton/canipay

一个静态交互式世界地图,展示各国支付勒索软件赎金的合法性状态、报告义务及法律来源引用。

Stars: 0 | Forks: 0

# 💰 我能支付勒索软件赎金吗? 一个静态的单页交互式世界地图,展示在特定国家/地区支付勒索软件赎金是否合法——包括报告义务、制裁风险以及各个司法管辖区的官方引用来源。 在线演示:点击(或悬停)某个国家/地区,查看其支付合法性状态、通俗的英文摘要,以及底层法律来源的链接。对于美国,还可以进一步查看各州的详细分类信息。 由 [ransomware.live](https://www.ransomware.live) 作为社区资源进行维护。最初概念基于 [rkovar/ransomwarelegality](https://github.com/rkovar/ransomwarelegality)。 ## 文件 | 文件 | 用途 | |---|---| | `index.html` | 完整的应用程序——HTML、CSS 和 JS 全部集中在一个文件中。无需构建步骤。 | | `countries.json` | 法律状态数据集,以 ISO 3166-1 alpha-3 国家/地区代码为键。在页面加载时由客户端获取。 | 没有后端、构建工具或包管理器——它作为静态文件部署在 nginx 或任何为 ransomware.live 其余部分提供服务的软件背后。 ## 工作原理 `index.html` 渲染一个深色风格的 [Leaflet](https://leafletjs.com/) 地图(CartoDB 深色无标签底图),并在加载时获取以下内容: - `countries.json`(位于同目录下)—— 法律数据集。 - 来自 `cdn.jsdelivr.net/gh/holtzy/D3-graph-gallery` 的世界 GeoJSON —— 国家/地区多边形。 - 来自 `cdn.jsdelivr.net/gh/PublicaMundi/MappingAPI` 的美国各州 GeoJSON —— 用于在单一美国多边形之上叠加各州的详细信息(一旦加载了州层级图层,原本的美国多边形就会被隐藏)。 每个国家/地区的多边形都会通过其 ISO alpha-3 代码(依次尝试 `feature.id` / `ISO_A3` / `iso_a3` / `ADM0_A3` —— 参见 `getCountryEntry()`)匹配到 `countries.json` 中的对应条目,根据状态着色,并赋予交互功能: - **悬停** → 弹出悬浮提示框(`showTip()`),显示名称、状态、简介和来源链接。 - **点击** → 打开右侧信息面板(`showPanel()`),显示完整的说明、引用以及(针对美国的)各州明细表。 首次访问时显示的“关于”模态框(通过 cookie 控制:`canipay_seen`)包含法律免责声明。 页面浏览追踪已接入了 Matomo 分析工具(`stats.mousqueton.io`,站点 ID `10`)。 ## `countries.json` schema 顶层对象以 ISO 3166-1 **alpha-3** 国家/地区代码为键: ``` { "USA": { "name": "United States", "iso2": "US", // ISO 3166-1 alpha-2, used to fetch the flag from images.ransomware.live/flags/.svg "status": "complicated", // see status values below "info": "Free-text summary shown in the tooltip and info panel.", "citations": [ { "label": "Source name shown in the UI", "url": "https://..." } ], // Optional — currently only present for USA: "stateDetails": [ { "name": "Florida", "status": "illegal", "note": "for state agencies & municipalities" } ] } } ``` ### 状态值 定义在 `index.html` 的 `STATUS` 映射中: | 状态 | 含义 | 颜色 | |---|---|---| | `legal` | 支付合法 | 绿色 `#22c55e` | | `report` | 合法,但必须报告付款/事件 | 紫色 `#a855f7` | | `complicated` | 情况复杂 / 附条件 / 处于变动中 | 黄色 `#eab308` | | `illegal` | 支付非法 | 红色 `#ef4444`(目前仅在美国州层级通过 `stateDetails` 使用) | | `unknown` / 缺省 | 无条目,或不在上述映射中的状态 | 回退到灰色的“未知 / 无数据”样式 | 如果某个国家/地区在 `countries.json` 中没有对应的键(或者其 `status` 值无法识别),将自动渲染为“未知 / 无数据”——在添加部分数据时无需进行特殊处理。 ## 添加或更新国家/地区 1. 在 `countries.json` 中对应的 ISO alpha-3 代码下添加/编辑条目(必须与 GeoJSON 源报告的 `id`/`ISO_A3` 一致),并包含用于显示旗帜图标的相应 `iso2` 代码(大写)。 2. 保持 `info` 的内容客观真实,并在 `citations` 中引用主要或权威的二手来源(政府指南、大型律师事务所等)。 3. 选择最严格且准确的 `status` —— 如果报告义务或制裁风险实质性地改变了情况,请优先使用 `report` 或 `complicated`,而不是 `legal`。 4. 仅针对美国,`stateDetails` 条目通过精确的 `name`(例如 `"Florida"`、`"D.C."`)与各州 GeoJSON 匹配;任何未列出的美国州将回退到 `complicated` / “适用联邦 OFAC 限制”(参见 `getStateInfo()`)。 5. 在提交之前验证 JSON(例如 `python3 -m json.tool countries.json > /dev/null`),并抽查新的引用链接 —— 失效的链接会悄无声息地降低 UI 中来源列表的质量。 ## 免责声明 本内容不构成法律意见,且该数据集明确排除了对向受制裁/指定实体付款的分析(详见应用内的“关于”模态框)。该领域的法律变化很快——请将 `countries.json` 视为需要定期根据现行立法重新核实的快照,而不是构建自动化的真实来源。 ## 本地开发 无需构建步骤——使用任意静态文件服务器托管该目录并在浏览器中打开,例如: ``` git clone https://github.com/JMousqueton/canipay cd canipay python3 -m http.server 8000 # 然后打开 http://localhost:8000 ```
标签:Leaflet, 勒索软件, 合规法律, 后端开发, 多模态安全, 数据可视化, 静态网页