假设我有一个带有按钮的 Windows GUI 应用程序。我可以通过使用 sendMessage winapi 调用(并将 BM_CLICK
作为调用的参数)来模拟对该按钮的单击。
现在,从安全角度来看,我不希望这种情况发生。即我的目标进程应该忽略来自另一个进程的 sendMessage 调用。有没有规定可以做到这一点?一种验证 sendMessage 调用的方法?
编辑:换句话说,如何阻止诸如 Enabler、TurnitOn http://www.raymond.cc/blog/how-to-enable-and-access-disabled-grayed-out-buttons-windows-and-checkboxes/ 等应用程序阻止访问用户不应该访问的功能?
最佳答案
如果应用程序在用户自己的上下文中运行,那么它只能执行用户可以执行的操作。经常被忽视的推论是,应用程序可以做的任何事情,用户也可以做。
因此,没有必要过多担心此类应用程序上的按钮是否“真正”被禁用。用户总是可以找到另一种方法来完成按钮本来要做的任何事情。 (这可能是通过使用注册表编辑器,获取具有相同功能的另一个应用程序,或者,如果没有其他方便的方法,他们可以在调试器内运行该应用程序并强制其重新启用该按钮。)
适当的解决方案取决于上下文:
在许多情况下,最合适的解决办法就是停止担心。您应该能够信任您的用户,如果不能,那就是人力资源问题,而不是技术问题。
如果应用程序为在更高上下文中运行的某些东西提供接口(interface),例如防病毒软件的前端,那么安全决策(是否允许用户这样做?)应该发生在后端。也就是说,安全决策需要由用户无法控制的代码来做出。
如果您是一名系统管理员,试图锁定一台信息亭机器(一台将由不受信任的用户使用的机器,通常使用某种类型的单个 guest 帐户),那么您可以使用 AppLocker 或软件限制定义允许用户运行哪些应用程序的策略。由于 Enabler 和 TurnItOn 不会出现在您的列表中,因此用户将无法运行它们来绕过您的安全策略。
关于windows - 防止跨进程 SendMessage 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11833500/