Windows 防止跨进程SendMessage调用

Windows 防止跨进程SendMessage调用,windows,winapi,sendmessage,Windows,Winapi,Sendmessage,假设我有一个带有按钮的Windows GUI应用程序。我可以通过使用sendMessage winapi调用,将BM_click作为调用的参数来模拟单击该按钮 现在,从安全角度来看,我不希望这种情况发生。i、 e.我的目标进程应忽略来自另一进程的sendMessage调用。是否有这样做的规定?验证sendMessage调用的方法 编辑:换句话说,我如何防止诸如Enabler、TurnitOn之类的应用程序访问不应由用户访问的功能?如果应用程序在用户自己的上下文中运行,那么它只能执行用户可以执行的

假设我有一个带有按钮的Windows GUI应用程序。我可以通过使用sendMessage winapi调用,将
BM_click
作为调用的参数来模拟单击该按钮

现在,从安全角度来看,我不希望这种情况发生。i、 e.我的目标进程应忽略来自另一进程的sendMessage调用。是否有这样做的规定?验证sendMessage调用的方法


编辑:换句话说,我如何防止诸如Enabler、TurnitOn之类的应用程序访问不应由用户访问的功能?

如果应用程序在用户自己的上下文中运行,那么它只能执行用户可以执行的操作。这通常被忽视的推论是,应用程序可以做的任何事情,用户都可以做

因此,担心这样一个应用程序上的按钮是否“真的”被禁用并没有什么意义。用户总是可以找到另一种方法来执行按钮要执行的任何操作。(这可能是通过使用注册表编辑器,获取具有相同功能的另一个应用程序,或者,如果没有其他方便的方法,他们可以在调试器中运行应用程序,并强制它重新启用按钮。)

适当的解决方案取决于上下文:

  • 在许多情况下,最合适的解决办法是停止担心它。你应该能够信任你的用户,如果你不能,那是人力资源问题,而不是技术问题

  • 如果应用程序为在更高上下文中运行的东西提供接口,例如,防病毒软件的前端,那么安全决策(是否允许用户这样做?)应该发生在后端。也就是说,安全决策需要由不在用户控制范围内的代码执行

  • 如果您是一名系统管理员,试图锁定一台kiosk机器(一台将由不受信任的用户使用的机器,通常使用某种类型的单一来宾帐户),那么您可以使用AppLocker或软件限制策略来定义允许用户运行的应用程序。由于Enabler和TurnItOn不在您的列表中,用户将无法运行它们以绕过您的安全策略


这就是为什么有UIPI来防止低特权应用程序向高特权应用程序发送消息。()但是不,你通常不知道消息是从哪里来的。毕竟,有些消息来自系统。谢谢!UIPI是我不熟悉的东西。但根据该文件,UIPI将不会对处于相同权限级别的应用程序生效。这不会减少UIPI的使用吗?作为系统管理员,您不应该这样做。如果我向您的应用程序发送窗口消息,我希望它能够正确地处理它们,而不是判定我没有经过“身份验证”。Windows安全性是基于用户的,而不是基于应用程序的,因此尝试这样做实际上没有意义;毕竟,用户可以在您的流程中修改代码,因此根据定义,他们可以绕过您可能采取的任何措施。@asudhak在这种情况下,请在您处理事件时检查它是否仍然适用(或启用)。按钮最初是如何禁用的?假设您有一个函数或某个内部状态,可以回答“是否应立即启用按钮?”的问题。请调用相同的函数等。在处理BM_时,如果按钮当时不应启用,请单击并忽略该消息。