c++ - 全局互斥可能导致它自己的应用程序的 DoS
问题描述
可以由不同用户(管理员、非管理员)在 Windows 上一次运行的应用程序。它有一个临界区,不能由不同(或相同)用户同时执行。
为了防止我通过调用从 WinApi 使用 Global Mutex:
CreateMutex(NULL, true, "Global\\MyMutex");
然后在工作完成后 Mutex 被释放。添加了“全局”前缀以使 Mutex 在所有 Windows 会话之间可见。(这是可选的,但我想说明这个 Mutex 不是本地的)。
现在的问题是:
假设有一个攻击者想要阻止任何人执行关键部分,所以她创建了一个程序,该程序创建了一个带有名称的互斥锁"Global\\MyMutex"
并且从不释放它......这样她就能够对我的应用程序执行 DoS 攻击以供其他人使用用户 - 因为他们无法到达关键部分。
问题是 - 如何使用 Global Mutex 防止这种攻击场景?
解决方案
你可以:
- 不使用全局互斥锁。
基本上就是这样。
但是你说,“我怎样才能阻止我的应用程序同时执行两次?”
那么,如果攻击者一遍又一遍地做那件事会发生什么?它会搞砸你的应用程序,因为没有其他人能够同时做到这一点,对吧?互斥锁或无互斥锁。
所以你需要弄清楚如何制作它,以便它可以同时完成。
您的另一个选择是声明您并不真正关心安全性。有时这是一种选择,例如,如果您信任所有登录计算机的人。如果有人决定攻击您的应用程序,这看起来不太好。
推荐阅读
- controller - 使用参数从 Web API 控制器获取 SSMS 中的数据
- c++ - 如果在对象创建期间传递了多个值,为什么带有一个参数的隐式构造函数会打印最后一个值?
- php - 我的网站花费太多时间来更新数据
- r - 在R中将具有不同长度和两个条件的不同数据帧的列相乘
- php - PHP - 将数组显示为 HTML 表格
- c - Clion: Error running 'makefile': Cannot build 'makefile'
- python - 在 python 中使用 steamworks sdk 函数(c++)的方法?
- c++ - 如何正确存储一组常量数据?
- ios - 协议方法没有传递正确的参数
- python - 可以保存 Django Admin 上的空 ArrayField 吗?