根据this article on MDN,使用postMessage将消息传入和传出chrome中的内容脚本是不安全的,因为无法正确定义源属性,并且targetOrigin难以安全地传递到潜在的恶意网站。这是否仍然如此。是否有其他方法来确认接收到的消息的来源,并且仅将消息发送给特定的内容脚本?或者有没有其他方法可以完全使用内容脚本?来自Chrome扩展内容脚本的postMessage的安全性?可能的选择?
0
A
回答
1
MDN文章中的“chrome”并不是指“Google Chrome”,而是指使用Chrome特权运行的扩展程序代码(look here用于Firefox中其他含义的“chrome”)。
在Google Chrome/Chromium中,内容脚本在网页中运行different environment(这意味着内容脚本中的window
与网页中的window
不同)。
但是,当您从内容脚本向页面发送消息时,event.source
将与页面的window
相同。因此,要验证该消息是否是从同一页面中的(内容)脚本实际发送的,可以使用if (event.source === window) { ... }
。
如果你想发送消息到另一个内容脚本(在相同的标签),那么你有两个选择:
- 如果帧位于不同的起源,或者如果内容脚本位于在不同的选项卡中,则必须将消息发送到背景页面,后者依次使用Chrome extension message passing API将消息传递到目标内容脚本。
- 如果通信帧位于相同的原点,则它们的变量可以直接共享,而无需使用消息传递API。请参阅使用
top
,parent
,<HTMLIFrameElement>.contentWindow
,frames[index]
等
另一个(的hackish)的方式来获得从一个内容脚本到另一个消息他们window
对象是通过chrome.storage
API。在接收端,绑定一个chrome.storage.onChanged
事件。要“发送”消息,请使用chrome.storage.local.set
。一旦有(未)收到消息,请不要忘记删除键值对。
相关问题
- 1. Chrome扩展内容脚本
- 2. 在Chrome扩展中传递来自内容脚本的邮件
- 3. Chrome扩展内容脚本中的JQueryUI
- 4. 内容脚本没有回应内容脚本的Chrome扩展
- 5. Chrome扩展内容安全策略
- 6. Chrome扩展,从内容安全策略
- 7. Chrome扩展程序自动更新选择性脚本
- 8. Chrome扩展(内容脚本)缓存CSS
- 9. Chrome扩展引用/从内容脚本
- 10. 停止内容脚本在Chrome扩展
- 11. Chrome扩展 - 内容脚本点播
- 12. jQuery的:在Chrome浏览器扩展的内容脚本输入选择
- 13. 来自Chrome扩展中的内容脚本的未定义响应
- 14. Chrome扩展:内容脚本和网页的脚本
- 15. 重定向到来自内容脚本的Chrome扩展程序URL?
- 16. Chrome扩展内容脚本访问扩展框架
- 17. Chrome扩展:如何检测是否使用内容脚本安装了扩展
- 18. 如何使用Chrome扩展运行不安全的内容
- 19. Chrome扩展中的内容安全策略问题
- 20. 在扩展的Chrome DevTools和内容脚本之间的沟通
- 21. Chrome扩展内容脚本自定义UI
- 22. Chrome扩展:内容脚本 - >动态功能
- 23. 使用Chrome扩展内容脚本嵌入其他内容
- 24. 可以在内容脚本中使用`chrome。*`扩展API吗?
- 25. Chrome扩展内容脚本可以访问window.opener吗?
- 26. Chrome扩展代码和内容脚本vs注入脚本
- 27. 来自Chrome扩展的注入脚本中的跨域请求
- 28. Chrome扩展脚本
- 29. 内容脚本中的Chrome扩展程序storage.sync.set引发异常
- 30. 如何刷新Chrome扩展的内容脚本,如DOM更改