是否可以在操作系统级别限制 php 可以通过 exec 传递哪些命令?

2024-01-21

我目前正在主持一个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(使用前将#替换为@)

是否可以在操作系统级别限制 php 可以通过 exec 传递哪些命令? 的相关文章

  • 根据用户投票移动 div

    我是新来的 但我喜欢这个网站 我检查了其他类似的问题 但没有看到我要找的东西 我是一名音乐家 有一段时间我一直在做 每日之歌 每天写一首小歌 我想将歌曲发布为 div 在里面 li 在 div 中 我只想要一个简单的 mp3 播放器和一个
  • 总小时数无法从 Android 插入 MySQL

    我使用以下公式获得总小时数 public void updateTotalHours int a SplitTime objMyCustomBaseAdapter getFistTime int b SplitTime objMyCusto
  • usort 不适用于 laravel 多维数组

    我有一个数组 Illuminate Support Collection Object items protected gt Array 0 gt stdClass Object id gt 79 name gt shelin status
  • XPath 直到下一个标签

    与之前在这里问过的其他人类似的问题 但由于我不知道如何应用这些建议 所以我需要一些帮助 我想找到一个 html 文档的节点 其结构如下 摘录 可能有所不同 h2 My title 1 h2 h3 Sub heading h3 p span
  • 静态类属性上的 isset

    class A public static foo 42 class A attribute foo var dump isset class attribute gives bool false 我如何检查这个类中是否存在这个静态属性 U
  • 如何用单引号替换双引号

    我该如何更换 我认为这称为双引号 我认为它称为单引号 使用 PHP str replace text 或重新分配它 text str replace text
  • PHP 矩阵的逆矩阵

    I saw 这个问题 https stackoverflow com questions 211160 python inverse of a matrix 并弹出这个想法 PHP 有没有一种有效的方法来做到这一点 EDIT 最好有演示 你
  • 如何使PHP库松耦合? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 php5-geoip 和 Maxmind 数据库获取 IPv6 支持

    我按照这些相同的步骤进行了 geoip 设置 http php net manual en geoip setup php http php net manual en geoip setup php wget http geolite m
  • gd 的 php 包装类

    谁能推荐一个 gd 库的包装类 我找到了一个few http www bin co com php scripts classes gd image 但它们只具有基本的图像处理功能 例如翻转 倒转等 我真的在这里画画 所以我想要所有的线 点
  • Selenium RC:如何检查元素是否具有给定属性?

    我有一些带有onclick属性和一些没有属性 我想检查指定的元素是否具有onclick属性 我怎样才能做到这一点 getAttribute 当有属性值时返回该属性值 如果没有 它会抛出 RuntimeException 并停止测试 即使我将
  • 将多个参数绑定到mysqli查询中

    现在我需要使用以下结构来处理将多个参数绑定到 mysqli 查询中 if words total 1 statement gt bind param s words 0 else if words total 2 statement gt
  • 仅显示帖子的子类别

    我有一个自定义帖子 我想显示它所属的所有类别 这有两个部分 在页面顶部 我只显示它所属的顶级类别 这就是我的做法 div class type block span class type initial span div
  • MySQL 中复制一条记录

    我有一个表 我想复制表中的特定行 我知道这不是最好的方法 但我们正在寻找快速解决方案 这比我最初想象的要难 我需要做的就是将整个记录复制到 MySql 中自动增量表中的新记录 而不需要指定每个字段 这是因为该表将来可能会发生变化 并且可能会
  • Wordpress Cron 错误“SSL 证书:无法获取本地颁发者证书”

    我在安装 WordPress 时遇到错误 wp cron php 无法由 WordPress 执行 调试工具 Crontrol 报告错误 SSL证书 无法获取本地颁发者证书 WGET 无法访问 wp cron php 很可能是由于 SSL
  • PHP PDO 与 mysql*() 的安全优势

    使用 PHP PDO 代替 mysql connect 等有任何安全优势吗 不会 与 MySQL 扩展相比 PDO 没有任何安全优势 墨菲定律告诉我们的除外 该定律对两者都适用 两者都会通过转义相同的字符来保证输入安全 然而 PDO 还有其
  • php中有指针吗?

    这段代码是什么意思 这就是你在 php 中声明指针的方式吗 this gt entryId entryId PHP 中的变量名称以 开头 因此 entryId 是变量的名称 this是PHP面向对象编程中的一个特殊变量 它是对当前对象的引用
  • 现实世界抽象类使用简单示例

    有没有使用抽象类的现实世界简单示例 我试图进入 PHP 的 OOP 但我仍然无法理解 为什么应该使用抽象类以及何时使用 是的 我知道不可能创建抽象类实例 只能创建继承它的类的实例 也许您有一个图像类 并且有 2 个驱动程序 GD 和 Ima
  • PHP 命名空间 - 提升一个级别?

    示例1 命名空间 Inori Test 主测试类 示例2 命名空间 Inori Test SubTest SubTest 类扩展了 问题 有没有办法快速提升命名空间的级别 以便 SubTest 可以扩展 MainTest 就像是 MainT
  • 创建横幅交换算法来轮播广告

    我正在构建广告横幅轮播脚本基于印象整个月均匀地显示广告 每次请求显示广告时都会进行计算 所以这将是即时完成的 广告应显示为一个接一个轮流播放 而不是仅显示一个广告 1000 次展示 然后显示另一个广告 1000 次展示 大多数情况下 它应该

随机推荐

  • 为偶数和奇数 div 添加不同的类

    我有一段 PHP 代码 如下所示 flag false if empty links echo h1 You have no uploaded images h1 br foreach links as link extension sub
  • 如何设置工作项的必填字段和默认值

    我正在为我的项目使用 Visual Studio Team Services 并通过网络访问它 我正在使用 Scrum 模板 我试图弄清楚如何设置任务字段的默认值 例如 对于任务的 活动 字段 我希望将其设为必填字段 并在每次添加新任务时将
  • 如何隐藏按钮轮廓

    我的这个页面有很多按钮 https jsfiddle net Android272 c150305z https jsfiddle net Android272 c150305z 我已经尝试了以下代码的每种组合 但没有任何方法可以摆脱轮廓
  • 具有动态维度的数组的子集部分

    我想对一个具有动态维数 k 的数组进行子集化 举个例子 A lt array 1 3 4 dim c 3 3 3 3 因为尺寸可能会有所不同 此处未显示 所以我不能简单地定义 a b c d 并通过以下方式进行查询 a lt 1 2 b l
  • 调试时 Epplus Save()、SaveAs() 等方法运行速度非常慢

    环境 Windows 10 Visual Studio 2017 netcore2 0 调试版本 在调试时使用 Epplus 4 1 1 保存 Excel 文件时 保存操作花费的时间比我预期的要长得多 这是使用 调试 gt 开始调试 运行时
  • 将每个 R for 循环迭代保存在新列表中

    我正在使用dataprepSynth 包的功能 参见https cran r project org web packages Synth Synth pdf https cran r project org web packages Sy
  • 算法优化[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 这里是link https www
  • 将参数传递给 Laravel 作业不起作用

    我之前读过这个问题的解决方案 但似乎我做错了其他事情 这就是我问的原因 通常解决方案是将参数添加到类的主体以及 construct 方法中 但甚至这样做它不起作用
  • 释放R中的内存

    在 R 中 我尝试将几组时间序列数据组合并转换为 xtshttp www truefx com page downloads http www truefx com page downloads但是 这些文件很大并且有很多文件 因此这导致我
  • 正确记录日志

    所以我的问题是关于日志记录 以及如何处理可能影响您的代码和运行时行为的日志语句 日志文件 每个程序都应该编写这些文件以正确解决问题 但如何正确执行呢 大多数日志语句的获取成本非常高 因为它们应该提供有用的信息 并且即使完全禁用日志记录 它们
  • 了解 Lambda 闭包类型如何删除默认构造函数

    从5 1 2开始 19 与 lambda 表达式关联的闭包类型有一个已删除的 8 4 3 默认构造函数和一个被删除的 复制赋值运算符 它有一个隐式声明的复制构造函数 12 8 并且可能有一个隐式声明的 移动构造函数 12 8 注意 复制 移
  • '已溢出其堆栈”' aria-label='构造大树时“线程'
    '已溢出其堆栈”'> 构造大树时“线程'
    '已溢出其堆栈”

    我实现了一个树结构 use std collections VecDeque use std rc Rc Weak use std cell RefCell struct A children Option
  • 中心标签还有效吗?

    我主要使用 HTML
  • 切换/切换 div (jQuery)

    我希望完成一项相当简单的任务 我希望 我有两个 div 标签和一个锚标签 如下所示 a href forgot password a div div div style display none div 我希望使用锚标记在两个 div 标记
  • 如何使用终端运行特定的 Android 应用程序? [复制]

    这个问题在这里已经有答案了 我已经安装了 Eclipse 和 Android SDK 一切都运行良好 我想安装 apk 文件 因此我已按照说明进行操作 但问题是 当我启动模拟器时 它不会自动运行我的应用程序 终端中是否有命令允许我运行我要求
  • iOS 上 UIImage 的运动模糊效果

    有没有办法在 UIImage 上获得运动模糊效果 我尝试了 GPUImage Filtrr 和 iOS Core Image 但所有这些都有常规模糊 没有运动模糊 我也尝试过 UIImage DSP 但它的运动模糊几乎不可见 我需要更强大的
  • java.lang.IllegalArgumentException:尝试打开下载的图像时未知的 URI

    我无法打开下载的图像DownloadManager单击通知时 这就是它的可重现性 我使用从网络下载图像DownloadManager 然后 当我单击有关此下载的通知时 操作系统会显示一个对话框 我可以在其中选择应用程序来打开下载的图像 但是
  • ASP.NET MVC 路由, Html.BeginForm

    div div
  • innerHTML 返回 NaN 和文本

    我遇到一个问题 我尝试返回一个值innerHTML但我得到了一个 NaN 我知道我的变量不是数字 但为什么他一直告诉我这个 function checkWord id nameOutput var pattern new RegExp b
  • 是否可以在操作系统级别限制 php 可以通过 exec 传递哪些命令?

    我目前正在主持一个Drupal http drupal org CentOS 计算机上的 6 个站点 德鲁帕尔 CMS http en wikipedia org wiki Content management system 配置包含几十个