javascript - 在 JavaScript 中使用 postMessage() 的复杂性
问题描述
当 iframe 及其父窗口位于不同的域时,我正在尝试通过 JavaScript 进行通信。我做了很多研究,结果证明如果正确使用 postMessage() 是一个好方法。我已经阅读了大量关于如何使用它来确保它以安全的方式实现并提出以下代码的资源。但是,由于我还是编码新手,所以我对 XSS 漏洞感到偏执,而且这段代码对我来说看起来太简单了,无法保证安全。我还没有在 Stack Overflow 上找到关于使用 postMessage() 的简单性/复杂性的明确帖子。
语境:
- 消息只能从 iframe 发送到父窗口
- iframe 是 https,而父级是 http
- 该消息不包含敏感数据——它只是一个简单的指标——用于触发谷歌分析事件的父窗口
- 父窗口域是:
http://my-main-web.com
- ifame 域是:
https://my-iframe-web.com
问题:
- 以下代码是否存在安全风险?
- 如果是这样,除了攻击者可能会发现消息内容“发生下载”之外,是否还有其他风险?例如,他可以通过消息注入细致的代码吗?
发件人(iframe):
<script type="text/javascript">
parent.postMessage("download occurred", "http://my-main-web.com");
</script>
接收方(父窗口):
<script type="text/javascript">
function receiveMessage(event) {
if(event.origin !== “https://my-iframe-web.com”) return; // validate origin
if (event.data !== "download occurred") return; // validate message content
console.log(“msg received”);
// trigger GA event
};
window.addEventListener("message", receiveMessage, false);
</script>
谢谢!米海
解决方案
推荐阅读
- python - 如何将字符串中的箭头运算符(->)替换为点(。)运算符
- python - 如何在 python 中打开浏览器时使用代理
- tableau-api - 我们如何计算表格中两列之间的差异和百分比差异
- image - 如何将图像类转换为文件
- google-app-engine - Google 应用引擎上的 Django 无法提供媒体文件
- amazon-web-services - 无法在控制台或 cli 中创建 AWS Rekognition 项目
- unity3d - 计算玩家移动方向时的延迟
- python - Python 3:像 Python 2 一样使用“rb”模式读取文件
- bash - TAR 覆盖目录的内容
- oracle - 如何配置 SSRS 报告以访问安装了 Report Server 的 SQL Server 机器上的 Oracle 数据库?