标签: postmessage

Chrome 扩展内容脚本之间的 postMessage 安全性如何?可能的替代方案?

根据MDN 上的这篇文章,使用 postMessage 在 chrome 中与内容脚本之间传递消息并不安全,因为无法正确定义源属性,并且其 targetOrigin 很难安全地传递到潜在的恶意站点。这仍然是真的吗?是否有其他方法可以确认收到消息的来源,并仅将消息发送到特定的内容脚本?或者除了完全使用内容脚本之外还有其他选择吗?

javascript security postmessage google-chrome-extension content-script

1
推荐指数
1
解决办法
1697
查看次数

PostMessage 和 HWND_BROADCAST

我正在尝试通过以下方式向所有窗口发送消息:

PostMessage( HWND_BROADCAST, 0x0401, 0, 0 );
or
SendMessage( HWND_BROADCAST, 0x0401, 0, 0 );
Run Code Online (Sandbox Code Playgroud)

问题是,没有窗口收到此消息。Windows 有自己的线程。问题是...如何向我的应用程序中的所有窗口发送消息,或者为什么此功能不起作用...

提前致谢。

c winapi postmessage broadcast sendmessage

1
推荐指数
1
解决办法
6202
查看次数

获取跨域 HTTPS iFrame 的父文档来源

我想window.top.location.origin从 iFrame 内部读取。
父级和 iFrame 位于不同的 HTTPS 域中。
例如,尝试访问会在 Chrome 中引发安全错误。
[DOMException: Blocked a frame with origin "..." from accessing a cross-origin frame.]

是否有可能在不触发错误的情况下做到这一点?

我需要window.top的来源,因为我根据该来源发送不同的 postMessage。

javascript iframe postmessage cross-domain

1
推荐指数
1
解决办法
3263
查看次数

Angular2 - 问题获取 iframe.contentWindow 成功和错误调用 postMessage()

我有一个 Angular 2 项目和一个 NodeJs 项目。我在 Angular 2 应用程序中有一个 iframe,我想在其中显示 NodeJS 应用程序。我想使用 postMessage() 方法从 Angular2 到 NodeJs,然后反向(从 NodeJs 到 Angular2)。Angular2 地址是http://localhost:3001,NodeJs 地址是http://localhost:3005

在 Angular 2 中,我在组件中有一个这样的模板;

template: `<iframe id="ifrm" #ifrm [src]="iframeURL()" width="500" height="200"> <p> Your browser does not support iframes</p> </iframe> `
Run Code Online (Sandbox Code Playgroud)


模板中使用的 iframeURL() 方法体;

iframeURL() {
 return this.sanitizer.bypassSecurityTrustResourceUrl('http://localhost:3005');
}
Run Code Online (Sandbox Code Playgroud)


当我运行应用程序时,我可以在 Angular2 的 iframe 中看到该页面。但是当我想获取 iframe 的 contentWindow(下面的代码)时,我得到了下面的解释(不是错误);

@ViewChild('ifrm') iframe: ElementRef;
Run Code Online (Sandbox Code Playgroud)

异常:DOMException:阻止了一个带有“ http://localhost:3001 ”的框架访问跨源框架。


当我使用如下所示的 postMessage() 方法时,出现异常;

this.iframe.nativeElement.contentWindow.postMessage('{}','http://localhost:3005');
Run Code Online (Sandbox Code Playgroud)

无法在“DOMWindow”上执行“postMessage”:提供的目标源(“ http://localhost:3005 ”)与收件人窗口的源(“ http://localhost:3001 ”)不匹配。


顺便说一下,我正在使用角度路由打开这个组件页面。整个组件代码如下:

import {Component, …
Run Code Online (Sandbox Code Playgroud)

iframe postmessage node.js angular

1
推荐指数
1
解决办法
6670
查看次数

PostMessage — 如何发送 int 数组?

如何发送int数组:

int *pars = new int[4];
pars[0] = 87675;
//...
pars[3] = 1024;
PostMessage(?);
Run Code Online (Sandbox Code Playgroud)

然后正确接收并清除内存:

LONG OnMessage(WPARAM wParam, LPARAM lParam) {
//?
}
Run Code Online (Sandbox Code Playgroud)

一切都在一个过程中。

c++ mfc postmessage visual-c++

1
推荐指数
1
解决办法
117
查看次数

VB.NET将Tab键发送到另一个应用程序窗口

我想将"{TAB}"密钥发送到另一个应用程序窗口(将密钥发送到窗口而不是文本框).

我试过了:

SendMessage(hWnd, WM_SETHOTKEY, VK_TAB, 0)
Run Code Online (Sandbox Code Playgroud)

没啥事儿.
我的目标是: 当应用程序窗口不在焦点时,
将tab键发送到我的应用程序其他应用程序. (我知道sendkey不专业,在这种情况下没有选择(这是我第一次使用它).)

我做了很多尝试,我总是回到同样的结果:

没啥事儿.

有人知道答案吗?

vb.net postmessage sendmessage windows-messages winforms

0
推荐指数
1
解决办法
2万
查看次数

对于0为0的句柄,PostMessage调用是否安全?

我有一个带有HWND句柄的数据模块,可以接收PostMessage调用.

手柄被分配在DataModuleCreate像这样(被TTNONVISUAL 没有定义):

{$IFNDEF TTNONVISUAL}
FHWND := AllocateHWND(WindProc);
{$ELSE}
FHWND := 0;
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

该数据模块还用于在TTNONVISUAL非可视程序定义.

数据模块中的WindProc包含在{$ IFNDEF TTNONVISUAL}中,因此在非可视程序中没有WindProc和FHWND = 0

在该程序中,对这个0句柄进行PostMessage调用是否安全?

注意:PostMessage不发送任何其他数据:
PostMessage(FHWND,WM_SYNC_PROGRESS,0,0)
和WM_SYNC_PROGRESS是WM_USER + 111,并且没有其他WM_SYNC_PROGRESS处理程序.

delphi postmessage

0
推荐指数
1
解决办法
523
查看次数

有什么办法让postMessage使用HTTPS?

我有一个浏览器书签,可以在页面上加载iframe.然后我需要iframe能够将字符串传递回父窗口.子页面具有以下功能:

function post(m){
parent.postMessage(m,'*');
}
Run Code Online (Sandbox Code Playgroud)

只要子页面(在iframe中加载的页面)在http上,这就可以正常工作.但是当它是https时,postMessage不起作用.我无法找到任何关于此的文档或任何解决方法.

有任何想法吗?

编辑:

在FF和Chrome上都会发生这种情况(还没有尝试过IE).为了澄清:iframe加载,只是postMessage没有被执行.在HTTP页面上,一切正常.我用来接收字符串的代码如下:

function listener(event){
if ( event.origin !== "http://www.mysite.com" )
return

if (event.data=="string1"){function1();}
if (event.data=="string2"){function2();}
}

if (window.addEventListener){
addEventListener("message", listener, false)
} else {
attachEvent("onmessage", listener)
}
Run Code Online (Sandbox Code Playgroud)

javascript iframe postmessage bookmarklet cross-domain

0
推荐指数
1
解决办法
4579
查看次数

SendMessage到Application.Handle无法正常工作

我已经创建了一个类,当它将被释放时,它应该向整个应用程序传播一个自定义消息.我做到了PostMessage,它只有几个错误

PostMessage(Application.Handle, UM_MYMESSAGE, 0, 0);
Run Code Online (Sandbox Code Playgroud)

然后我意识到它应该是同步的 - 通过SendMessage.

SendMessage(Application.Handle, UM_MYMESSAGE, 0, 0);
Run Code Online (Sandbox Code Playgroud)

在我的表单上,我使用TApplicationEvents组件处理消息,但只是切换SendMessagePostMessage没有使它处理消息

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if Msg.message = UM_MYMESSAGE then
  begin
    ShowMessage('Ok');

    Handled := True;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

如果我通过表格处理但没有合作,它可以工作Application.Handle......我做错了什么?

delphi postmessage sendmessage

0
推荐指数
1
解决办法
647
查看次数

Javascript window.opener.postMessage 具有多个子域的跨域

我正在尝试在执行以下操作时允许多个子域:

window.opener.postMessage(...);
Run Code Online (Sandbox Code Playgroud)

这有效,但这并不安全,因为所有可能的域都是允许的,我不希望这样:

window.opener.postMessage('MyMSG', '*');
Run Code Online (Sandbox Code Playgroud)

这适用于单个域:

window.opener.postMessage('MyMSG', 'https://example.com');
Run Code Online (Sandbox Code Playgroud)

但是如果我想允许这个: *.example.com 怎么办?

当然是这个:

window.opener.postMessage('MyMSG', '*.example.com');
window.opener.postMessage('MyMSG', 'https://*.example.com');
window.opener.postMessage('MyMSG', 'https://(.*)example.com');
Run Code Online (Sandbox Code Playgroud)

不起作用

这样做的正确方法是什么?这甚至可能吗?

谢谢

javascript postmessage multiple-domains cross-domain

0
推荐指数
1
解决办法
3505
查看次数

Delphi:以管理员身份运行的应用程序不会从非管理员应用程序接收消息

我想使用SendMessage / PostMessage将消息发送到另一个应用程序,但是当另一个应用程序以管理员身份运行时,它永远不会收到消息。如何在不以管理员身份运行“发送”应用程序的情况下克服此问题?

编辑:Remi的答案,接收器应用程序的代码

Const dummyValue = WM_USER + 71423;

  Application.HookMainWindow(AppClass.AppHookFunc);
  ChangeWindowMessageFilter(dummyValue, MSGFLT_ADD);

Type TAppClass = class
  function AppHookFunc(var Message : TMessage): Boolean;
end;

Var AppClass: TAppClass;

function TAppClass.AppHookFunc(var Message : TMessage): Boolean;
begin
  Result := False;
  Case Message.Msg of
    dummyValue: begin
      // do stuff
      //
      Result := True;
    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

delphi winapi postmessage sendmessage

-1
推荐指数
1
解决办法
117
查看次数