我目前正在主持一个Drupal http://drupal.org/CentOS 计算机上的 6 个站点。德鲁帕尔 (CMS http://en.wikipedia.org/wiki/Content_management_system)配置包含几十个不应该的第三方模块forked http://en.wikipedia.org/wiki/Fork_%28software_development%29作为一般的最佳编码实践。然而,其中一些模块利用php exec http://php.net/manual/en/function.exec.php命令才能正常运行。
该网站允许管理员通过 UI 配置在任何页面中嵌入 php 代码片段,前提是他们有权访问 php 代码输入格式。我需要让管理员可以使用这种输入格式,因为有几个节点(页面)和面板窗格使用小型、无害的 php 代码片段,例如将特定表单嵌入到内容区域中。
问题是,如果有人破坏了管理员帐户,那么他们可以在网站上运行任意 php 代码,从而通过 php 运行 shell 命令exec
, passthru http://php.net/manual/en/function.passthru.php等等。有没有办法从操作系统级别限制 php 可以传递到机器的 shell 命令?这可以通过限制 php 中某些程序的文件权限来完成吗?
Note:我无法使用 php.ini禁用功能 http://www.php.net/manual/en/ini.core.php#ini.disable-functions我仍然需要指令exec
在许多情况下正常运行,其中模块使用某些 shell 命令,例如视频编码。
如果您的管理员帐户被黑客入侵,您就注定失败。你试图减少厄运,但这不会起作用。
禁用 exec()
这只是能够调用系统的所有函数的一小部分。还有很多,比如passthru()
, shell_exec()
, popen()
, proc_open()
、反引号运算符等等。不会有帮助。
限制可用的可执行文件
仅当攻击者无法携带自己的可执行文件时才有效。但file_put_contents()
将能够将可执行文件写入硬盘,然后可以调用它。也将无济于事。
PHP 本身不会造成任何伤害,不是吗?
错误的。通过在服务器上执行东西exec()
可能看起来是最好的主意,但 PHP 本身就足够强大,足以对您的服务器以及与其连接的任何东西造成严重破坏。
我认为唯一真正的解决方案是:
不要让您的管理员帐户被黑客入侵。
如果他们遭到黑客攻击,能够立即知道。能够将攻击追溯到管理员。能够了解攻击者对您的计算机到底做了什么,以便您能够撤消它。一个非常重要的部分是您实现一个审计跟踪记录器,将其数据保存在不同的机器上。
您可能首先会对谁可以以管理员身份登录实施更严格的限制。例如,如果您确定某个管理员始终使用其本地 ISP 的 IP 范围进行工作,则可能不需要允许全世界的 IP 范围登录。至少,如果不是预期的情况,请按响铃并通知其他人正在从中国登录(除非您在中国操作:-))。
并且有两个因素的身份验证。您可以向该电话号码发送一条包含额外登录代码的短信。或者,您也许可以通过实施 Google 或 Facebook 身份验证来完全外包登录。这些参与者已经拥有支持这一点的基础设施。
此外,你对内部工作的抵制也更大。人们确实比雇主的登录更重视他们的个人社交网络登录。获取某人的 Facebook 密码平均花费 30 美元,但公司登录信息已经共享,价格为 8 美元。去搞清楚...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)