架构与安全
供安全评审、合规评估和供应商问卷使用的技术规格说明。
本文档在满足安全与合规评估所需的层面上,描述平台的架构与技术控制。实现细节、 供应商与子处理方的身份,以及内部路由的规格,会依据合同、并在适用时依据保密协议提供给签约方—— 也包括用于应对正式审计的情形。
分层#
客户端
无依赖的 ES5 JavaScript,压缩后 ≈7 KB,以 defer 加载。
在访客浏览器中运行:读取 URL 参数、写入第一方 cookie 并发送事件。
应用层
基于 HTTPS 的 REST API。提供广告系列配置、接收事件,并对服务器到服务器回传做 token 认证。
持久层
关系型数据库,带去重唯一键,并按广告系列、来源和日期建立索引。按记录存续时长自动清除。
数据流#
| 环节 | 传输内容 | 方向 |
|---|---|---|
| 代码加载 | 广告系列标识符,包含在脚本 URL 自身中 | 浏览器 → 平台 |
| 广告系列配置 | 广告系列的行为参数。不含任何访客数据,不含任何密钥 | 平台 → 浏览器 |
| 访问记录 | 点击标识符、来源、referrer、广告系列参数、浏览器 UA | 浏览器 → 平台 |
| 转化记录 | 点击标识符、交易标识符、金额 | 浏览器 → 平台 |
| 服务器到服务器回传 | 点击标识符、交易标识符、金额、广告系列 token | 广告主服务器 → 平台 |
| 向媒体平台转发 | 点击标识符、交易标识符、金额,具体以各已签约平台的要求为准 | 浏览器或平台 → 媒体平台 |
所存储的数据#
服务端,按事件#
| 字段 | 性质 | 备注 |
|---|---|---|
| 广告系列 | 运营数据 | 标识符与内部名称 |
| 事件类型 | 运营数据 | 访问或转化 |
| 点击标识符 | 假名化 | 可由产生它的媒体平台重新识别 |
| 交易标识符 | 假名化 | 可由广告主在其自有系统中重新识别 |
| 转化金额 | 商业数据 | 两位小数 |
| 流量来源 | 技术数据 | 发布商或渠道 |
| Referrer | 技术数据 | 最长 500 个字符 |
| 浏览器 UA | 技术数据 | 最长 255 个字符。可能有助于指纹识别 |
| IP 地址的哈希值 | 假名化 | IP 与站点盐值组合后的 SHA-256。不存储 IP 地址本身 |
| 会话与设备标识符 | 假名化 | 仅在广告系列用到时 |
| 广告系列参数 | 假名化 | 封闭的允许列表——见下文 |
| 日期与时间 | 技术数据 | — |
姓名、邮箱、电话、身份证件号、住址、支付数据、购物车内容,以及可读形式的 IP 地址。 平台不会从广告主处接收这些数据,也没有任何途径获取它们。
浏览器端#
第一方 cookie,保存从 URL 收到的标识符,另有两个不含访客数据的技术控制标记。完整说明见 写入的 cookie。
安全控制#
IP 地址哈希化
IP 在任何写入之前就被转换为带站点专用盐值的 SHA-256 哈希。原值不会被持久化, 也无法从哈希还原。
参数允许列表
URL 参数中只保留广告系列参数(utm_ 前缀)和一份封闭的广告平台标识符清单。
其余一律在入口处丢弃——误放进 URL 的个人数据不会被存储。
入口处的长度限制
每个字段在入口处都有最大长度限制,并做文本清洗。这可防止通过超长字段注入, 也限制了单次请求的写入量。
数据库层去重
以事件类型、点击标识符和交易标识符构成唯一键。重复请求会被接受并静默丢弃, 这既让重发变得安全,也杜绝了靠重复请求虚增计数。
自动化流量过滤
UA 被判定为机器人、爬虫或监控程序的访问不会被记录。该过滤不适用于转化, 以免丢弃 UA 不常见的真实客户事件。
按广告系列的 token,恒定时间比较
回传通过广告系列专属 token 认证,采用恒定时间比较。token 无效、缺失和广告系列不存在 会产生完全相同的响应,不会泄露哪些广告系列存在。
公开响应的范围
由浏览器调用的路由不接受凭据,也不暴露任何密钥。回传 token 绝不会出现在 API 的任何响应中。
受限的 cookie
只使用第一方 cookie,带 SameSite=Lax,在 HTTPS 下带 Secure。
不使用任何第三方 cookie。
重定向校验
广告系列中配置的重定向 URL 在使用前会被校验,会执行脚本的协议一律拒绝—— 这可防止一处错误配置演变成访客浏览器中的代码执行入口。
失败即拒绝
任何环节出错的结果都是不记录,绝不会记录错误数据,也绝不会破坏广告主页面。参见 工作原理。
响应头#
| 路由 | 响应头 |
|---|---|
| 代码 | Cache-Control: public, max-age=300, must-revalidate、ETag、Access-Control-Allow-Origin: * |
| 事件记录 | Cache-Control: no-store、Access-Control-Allow-Origin: * |
| 回传 | Cache-Control: no-store |
保留与清除#
| 数据 | 保留期 | 清除机制 |
|---|---|---|
| 访问与转化事件 | 30 天 | 按记录存续时长执行的每日自动任务 |
| 浏览器中的 cookie | 广告系列的归因窗口:默认 30 天,最长 365 天 | 由浏览器过期清除 |
| 地理位置缓存 | 命中 24 小时,失败 10 分钟 | 自动过期 |
| 浏览器中的技术标记 | 会话期内,或直至用户清除 | 清除浏览器数据 |
| 广告系列配置 | 广告系列存在期间 | 由运营人员删除 |
子处理方与第三方#
平台在三种职能上涉及第三方。各服务方的身份、数据处理所在地以及相应的数据处理协议, 会依据合同提供给签约方。
| 职能 | 涉及的数据 | 发生时机 |
|---|---|---|
| 托管基础设施 | 所有已存储的数据 | 持续 |
| 已签约的媒体平台 | 点击标识符、交易标识符、金额 | 转化时,视广告系列而定 |
| IP 地理位置解析(外部备用服务) | 访客的 IP 地址 | 仅在设有城市规则的广告系列中,且仅当本地数据库无法解析时。参见地理位置解析 |
通过外部服务进行地理位置解析可能构成数据跨境传输。不使用城市规则的广告系列不会触发这条路径。 对跨境传输有限制的广告主应告知 Moclick 团队,以便按合规要求配置广告系列。
已知限制#
这些限制在此明确声明,因为它们会影响数据的解读,并且常常是技术问卷的考察点:
- 在访客浏览器中执行。由于是客户端 JavaScript,第三方在技术上有可能修改、 拦截或阻止其执行。脚本拦截器会让测量失效,且不会有任何错误信号。
- 依赖第一方 cookie。用户清除 cookie、无痕浏览,或在另一台设备上完成转化, 都会中断归因。
- 后台面板中的展示量和花费是估算值,而非实测值——参见 指标。
- 单页应用中转化侦测的监听窗口为 120 秒。
- 代码本身不做同意校验。代码不会自行去查询同意管理平台。 使用同意管理的站点应把代码的加载条件挂到相应的同意类别上。
- 与外部平台报表存在预期内的差异,原因是归因模型、窗口和去重标准不同。
连续性与可用性#
平台不可用不会影响广告主站点:代码静默失败,页面照常工作。其后果是该时段内的转化未被记录, 访客不会看到任何报错。
可用性承诺、备份流程、恢复计划和事件响应载于合同,可应要求为供应商评估提供详细说明。
修订#
本文档在架构或数据处理有重大变更时都会修订。影响可观察行为的变更会记录在 更新日志中。如需安全问卷、供应商评估或补充文档,请联系 Moclick 团队。