防止跨进程SendMessage调用

时间:2012-08-06 18:02:08

标签: windows winapi sendmessage

假设我有一个带有按钮的Windows GUI应用程序。通过使用带有BM_CLICK的sendMessage winapi调用作为调用的参数,我能够模拟对该按钮的单击。

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

编辑:换句话说,如何阻止启动器,TurnitOn http://www.raymond.cc/blog/how-to-enable-and-access-disabled-grayed-out-buttons-windows-and-checkboxes/等应用程序访问用户无意访问的功能?

1 个答案:

答案 0 :(得分:1)

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

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

适当的解决方案取决于具体情况:

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

  • 如果应用程序为在更高环境中运行的某些内容提供接口,例如,防病毒软件的前端,那么安全决策(用户是否允许这样做?)应该发生在后端。也就是说,安全决策需要由用户无法控制的代码来处理。

  • 如果您是系统管理员试图锁定自助服务终端机器 - 一台将由不受信任的用户使用的计算机,通常使用某种类型的一个来宾帐户 - 那么您可以使用AppLocker或软件限制策略,用于定义允许用户运行的应用程序。由于启动器和TurnItOn不在您的列表中,因此用户无法运行它们以绕过您的安全策略。