Flux Art —— AI 如此简单,激发你的无限创意
多模型 AI 视觉创作与生产平台 · 统一账号与工作台 · 图片、视频、素材管理与 OpenAPI
开始创作 →
Flux Art › 博客 › 科普指南 › 预览窗口发回的消息能直接信吗:postM…

预览窗口发回的消息能直接信吗:postMessage 接收校验怎么做

网友化名投稿:纸月旧相册 发布时间: 分类:科普指南

收到消息,不等于收到可信审核结果

使用 Flux Art 生成图片后,自建工作台可能打开独立预览窗口,让用户选定一个版本再回传。浏览器收到 message 事件,并不代表这个结果来自预期窗口。应先核对发送者,再判断消息结构与当前任务,最后才更新界面。本文只讨论自建页面之间的通信设计,不描述平台内置回传协议;示例字段由应用自行定义,不是 OpenAPI 响应字段。

先写清哪两个页面允许通信

登记父页面和预览页的完整源,包括协议、主机与有效端口,并记录由哪个打开动作建立窗口关系。不要只检查域名字符串是否包含品牌名称,也不要把多个环境的地址混为一个允许值。开发、测试与正式环境分别配置。窗口对象标识和允许源解决不同问题:同一个源可能有多个页面,持有同一个窗口引用也不保证它一直停留在原来的地址。

先验证来源,再读取业务含义

MDN 对 Window.postMessage 的建议是核对事件的 origin,必要时同时核对 source,并验证接收到的数据格式;发送时使用明确的目标源。依据见 https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage 。下面是假设消息验收表,不是真实攻击或兼容性测试。接收器应在验证完成前保持当前选择不变,不把不合格消息的字段先显示出来再补检查。

检查项通过条件未通过时
来源与配置源精确匹配拒绝业务动作
窗口属于本次预览关系保持原选择
结构类型与版本符合协议记录格式错误
素材在当前授权集合内拒绝未知编号
操作仍处于待确认状态忽略已结束操作
重复已有结果不重复执行保留首次结果

消息格式只允许约定的动作

建议定义小而明确的协议:消息类别、协议版本、操作编号和允许选择的素材版本标识。校验字段类型、长度、必填项及允许值,拒绝无法识别的动作,不把传来的字符串当成代码、DOM片段或任意导航指令执行。接收到一个素材编号,也要在当前用户可访问的集合中查验,不能因为来源正确就认为发送页面有权要求主页面执行任何操作。

窗口发生导航后重新确认关系

用户可能在预览窗口里打开其他页面,也可能关闭窗口后重新启动一次预览。不要将旧窗口发送过一次正确消息当作永久认证。每次消息都进行源与窗口关系检查,并把本次打开产生的操作编号与当前待处理状态关联。已经结束的操作不再接受第二次提交;重复消息可记录为重复,不应再次触发保存、覆盖或接口调用。操作编号本身不是替代身份检查的秘密口令。

发送方向也要限制接收者

发送端应指定预期接收页面的源,而不是为了让消息容易送达就统一使用星号。只发送完成当前任务所需的标识,不把图片访问令牌、完整密钥或未公开备注放进广播式消息。若接收端已导航到不同源,发送失败或无响应应保持未完成状态,再由用户重新打开流程。不要通过放宽来源来修复超时,也不要把未收到确认记成对方已保存成功。

为拒绝分支准备无害演练

假设测试预览回传一个已选版本,另一个测试窗口回传相同格式,但不属于登记的窗口。这是假设场景,不是真实事件。合格结果应是仅预期窗口的合格消息能够完成当前操作。再测试错误协议版本、未知素材编号、缺少字段、已取消操作与重复回传,确认均不会改变审核状态。演练使用专门测试数据,不向不受控第三方页面传送真实素材或凭据。

日志要解释拒绝原因,不复制全部数据

建议记录校验阶段、简短原因类别、应用版本及去敏后的操作关联,不默认保存完整消息内容或整条签名地址。没有收到消息与收到后拒绝是两种状态,排查时分别统计。若某个合法浏览器环境不支持预期流程,提供普通选择与确认的替代方式,未知环境保留待补证。回归记录还应包括关闭监听器的时点,避免多个旧监听器同时处理新的消息。

用双方协议和回归记录交接

交付清单应包含允许源配置、窗口建立方式、消息结构、授权检查、取消与重复规则,以及双方版本不一致时的处理。技术依据核对于2026年11月10日,以上协议与测试步骤是编辑建议,未执行读者系统的验证。Flux Art 的创作入口为 https://flux-art.net/zh ,需要服务端接入可查看 https://flux-art.net/zh/openapi 。跨窗口通信只是自建工作台的一部分,不能据其通过就推断文件权限或接口鉴权全部正确。

继续处理这个任务:进入 Flux Art 的 AI 图像工作台 承接页,核对当前能力、参数与权益后再开始。

进入 AI 图像工作台 →

常见问题(FAQ)

Q:只检查消息里的域名字段可以吗?

A:不可以。业务数据中的自报字段不证明发送者身份,应检查浏览器事件提供的来源信息及预期窗口关系。

Q:检查 origin 后还要 source 吗?

A:对于只接受某个预览窗口的设计,仍应核对窗口对象关系。相同源下可能存在多个窗口,允许源不能替代会话范围。

Q:操作编号能替代来源校验吗?

A:不能。它用于关联当前待处理动作,不能单独证明是谁发送,也不自动赋予修改素材的权限。

Q:为什么不能用星号发送?

A:敏感流程需要明确接收源,避免窗口导航后仍把数据交给非预期页面。只发送必要字段,并保留失败状态。

Q:数据格式正确就能执行吗?

A:还要检查素材权限、动作是否允许及操作是否有效。格式校验与业务授权各有作用,不能互相代替。

Q:没有收到确认可以自动再保存吗?

A:应按应用定义的确认与去重规则处理,不能把超时当失败或成功后盲目重复有副作用的动作。

Q:应保存完整消息用于排查吗?

A:通常先记录去敏后的原因类别和关联标识。消息可能含业务资料,不应为了排查把所有内容复制到日志。

Q:这与 Worker 的 postMessage 相同吗?

A:本文讨论 Window 之间的通信身份边界。Worker 数据传递、可转移对象和所有权是另一类问题,不能套用同一份验收结论。