我正在制作一个网站(Win2012r2 上的 PHP7,使用 Apache 2.4/JS)来协助帮助台。正在搜索的信息主要是有关计算机、用户和 Active Directory 的信息。MSSQL 等其他一些资源和从 CMD 行运行的一些旧版应用程序也提供了信息。现场支持工程师还应该能够从移动设备请求这些信息。
在 80% 的情况下,帮助台可以使用最近的数据,但不是实时数据。我设置了一堆 PHP 脚本和 PS 脚本来收集相关数据,将其放入 MySQL DB,然后让帮助台网站查询该信息(静态或使用 AJAX)。
在 20% 的情况下,当用户接听电话时,帮助台或 FS 工程师需要查看近乎实时的数据以排除故障。现在我面临的难题是如何以可接受的速度(比如几秒钟)获取这些数据 - 但必须以安全的方式完成!
到目前为止我尝试/考虑过:
1) 让 webrequest 使用 sys_exec() 执行 MySql 触发器,以触发外部脚本来获取数据。问题:sys_exec() 不是原生 MySql,而且不安全,因为它可供所有 MySql 用户使用。
2) 让 (PHP) webrequest 触发 exec 以启动获取数据的脚本。问题:您需要为触发 exec 的 PHP 脚本赋予过多权限,这同样非常不安全。
3) Webrequest 将一行放入 MySql(我们将其命名为“todo”)内存表中,并让具有更多权限且在 Web 服务器环境之外(但在同一台服务器上)的位置的脚本轮询“todo”表、执行请求并在另一个表中返回结果的几种方式。虽然这种设置对潜在黑客来说至少有 5 个障碍,使其非常安全,但它依赖于请求者和执行后端脚本的轮询,因此速度很慢。尽管速度很慢,但目前我认为这是最好的选择。
4) 在发出请求的 PHP 和收集数据的脚本之间使用网络连接 (localhost)。问题:这只能以即发即弃的方式工作,因为发出请求的 PHP 只能使用默认权限执行 UDP 请求。要建立正确的 TCP 连接,发出请求的 PHP 脚本需要 root/Admin 权限,这是不安全的。虽然如果监听的“收集脚本”将其数据返回到 mysql 中的临时内存表,则即发即弃可能会起作用,但需要进行大量的状态/错误检查循环和再次轮询。
5) 直接使用 PHP 获取 SNMP、WMI、MSSql 和 MySql 等数据。虽然 SNMP 和 MySql 非常容易实现,但 MSSQL 和 WMI 调用(尤其是 WMI 调用)很难(至少对我来说)在 Windows2012R2 服务器上的 PHP7 上正常工作。
有谁知道我该如何将来自各种来源的数据传回请求的 PHP 脚本,而不会使此设置成为重大安全隐患?或者更好的是,有一个好的修复方法可以让 MSSQL 和特别是 WMI 在从 windows2012r2 运行的 PHP7 下工作?