资源 · 116

postMessage:验证来源、窗口与请求命令

为iframe或弹出窗口建立消息契约,拒绝意外发送方和数据。

已更新 · 2 min

本指南有助于实现的目标

  • 定义通信双方与类型
  • 产生效果前验证
  • 测试导航和契约外消息

快速检查

  • 来源、窗口、类型和最少数据契约。
  • 验证顺序与无业务效果的拒绝。
  • 拒绝矩阵与监听器清理。

分步指南

  1. 1

    定义通信双方与类型

    列出准确允许的origin、预期窗口引用及有用消息类型。敏感数据使用明确targetOrigin。origin包含协议、主机和端口;在域名中查找子字符串不能验证对方。

    来源、窗口、类型和最少数据契约。

  2. 2

    产生效果前验证

    比较event.origin,并在此窗口集成中比较event.source与预期窗口。验证结构、允许值和操作状态。作为数据处理,不执行eval或插入HTML。允许的来源不替代服务器授权。

    验证顺序与无业务效果的拒绝。

  3. 3

    测试导航和契约外消息

    测试相似域名、不同端口、同源其他窗口、无效字段及关闭后消息。移除多余监听器,使已结束通信失效。窗口导航后,回复仍使用预先批准的origin。

    拒绝矩阵与监听器清理。

可复现的验收案例

虚构示例:数据不代表客户或实际观察结果。

查看案例输入
{
    "allowed_origin": "https://widget.example",
    "observed_origin": "https://widget.example",
    "expected_window": "active_iframe",
    "observed_window": "another_window",
    "payload_schema_valid": true,
    "expected": "reject_without_effect"
}

预期判断

虚构例:https://widget.example已获允许,但event.source是其他窗口。契约要求活动iframe窗口,因此拒绝消息且不发出命令。

MDN — Window.postMessage

您的验收笔记

按本指南的标准记录观察。记录不等于认证。

笔记不会自动保存。离开前请导出。

管理指标

指标衡量内容首要行动
拒绝意外案例无效果拒绝的负面案例 / 已执行负面案例记录来源、窗口及状态
完成允许通信完成的预期场景 / 已测试预期场景区分收到消息与确认效果

常见错误

    常见问题解答

    检查event.origin就够了吗?

    不够。还需检查窗口、结构和状态。服务器仍须验证请求操作的权限。

    官方参考文献

    参考文献支持该方法。 请根据您的实际情况调整检查;它们并非认证。 原始参考文献标题和源文档可能使用其他语言。

    参考资料查阅日期 .