php 中有 exec system popen 等一系列运行外部程序的函数。在 web 环境中使用这些函数的时候,即使控制好了权限,保证了被执行程序本身的安全,还可能有另外的潜在风险。 php 的这些函数实际上是使用了 popen 函数。popen 利用了 vfork 来启动一个 shell 子

php 中有 exec system popen 等一系列运行外部程序的函数。在 web 环境中使用这些函数的时候,即使控制好了权限,保证了被执行程序本身的安全,还可能有另外的潜在风险。

php 的这些函数实际上是使用了 popen 函数。popen 利用了 vfork 来启动一个 shell 子进程来执行命令。但是 popen 并没有在子进程中关闭原有的进程的文件描述符。这样子进程也会占有这些文件描述符,即使它们并不需要,如果子进程长时间运行,还会导致这些资源没法释放。

比如在 php-fpm 环境中,如果在子进程长时间运行时 php-fpm 崩溃,或者手动停止服务,监听的端口 9000 所对应的文件描述符还会被子进程共享。此时想重新启动 php-fpm 也会因为端口被占用而失败。

比如运行如下程序

然后

killall php-fpm

杀死 php-fpm 后,

netstat -lntp

会看到,9000 端口被一个 sh 进程占用。

...

tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3935/sh

...

查看这个 sh 会发现这正是执行 sleep 的那个进程。

...

nobody 3935 0.0 0.0 4272 580 ? S 11:06 0:00 sh -c cd '/usr/share/nginx/www' ; sleep 1000

...

php 运行外部程序_php 中运行外部程序的一个潜在风险相关推荐

  1. Linux运行xp,浏览器中运行Windows XP和Ubuntu?奇!

    看到题目,我是惊呆了.『不管你信不信,我是信了』.大家可能需要测试某些东东又不愿意使用自己的机器,JPC-2 来帮你解决此类问题.总体思路:在浏览器中运行虚拟机(包括Windows XP (with ...

  2. php 运行外部程序_PHP实现执行外部程序的方法详解

    这篇文章主要介绍了PHP实现执行外部程序的方法,结合实例形式分析了php执行外部程序的常用函数相关使用技巧与注意事项,需要的朋友可以参考下 本文实例讲述了PHP实现执行外部程序的方法.分享给大家供大家 ...

  3. PHP对内存的运行,在PHP中运行密集的批处理过程,并避免内存耗尽

    我有几千条记录(存储在MYSQL表中的表中),我需要"批处理".所有记录都包含一个大型 JSON.在某些情况下, JSON超过1MB(是的,我的数据库远远超过1GB). 我有一个功 ...

  4. apk在模拟器中能运行而手机中运行不了

    问题: 模拟器上一切正常,而到了手机上刚打开应用就报异常: 解决:项目中只有中分辨率的资源和布局文件是全的,而模拟器也是中分辨率,所以运行没问题.手机是高分辨率,但高分辨率的资源和布局文件不全,所以报 ...

  5. docker 运行java程序_Docker:在容器中运行Java应用程序

    您可以使用Docker在特定的运行时环境中运行容器中的Java应用程序.本教程介绍如何创建Dockerfile,以便在OpenJDK 8的容器中运行简单的Java应用程序. 示例应用程序由一个Main ...

  6. php 运行外部程序_PHP在linux上执行外部命令的方法

    目录: 一.PHP中调用外部命令介绍 二.关于安全问题 三.关于超时问题 四.关于PHP运行linux环境中命令出现的问题 一.PHP中调用外部命令介绍 在PHP中调用外部命令,可以用,1>调用 ...

  7. python运行外部程序_在Python中运行外部程序(可执行文件)?

    在Python中运行外部程序(可执行文件)? 我刚刚开始研究Python,我一直在尝试从Python运行外部可执行文件. 我有一个用Fortran编写的程序的可执行文件. 假设可执行文件的名称是flo ...

  8. vc中运行外部程序的方法

    }    CloseHandle(ProcessInfo.hThread);    CloseHandle(ProcessInfo.hProcess);    return TRUE; } retur ...

  9. 在JScript中运行应用程序

    与像C++.C#.Java等编程语言相比,脚本语言更适合于创建短小的应用程序以便快速解决小问题. 在很多情况下,脚本很适合于实现手动任务的自动化,例如:操纵windows环境,运行其他程序,使登录过程 ...

最新文章

  1. 电脑任何字都打不出来_“有时候觉得自己一个字都写不出来了”
  2. 正向代理反向代理 简(fu)明(za)解释
  3. navicat 批量修改列数据
  4. 【知识星球】LeNet5,AlexNet,VGG,MobileNet它们的前身都是什么,你知道吗?
  5. 设计一个简单的缓存容器
  6. Logistic回归与牛顿迭代法
  7. MTK 驱动开发(30)---Memory 移植
  8. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(3)签到题3题
  9. 为什么xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?
  10. 从turtlesim到贪吃蛇……(补充)
  11. Android 版本号及对应的版本名称
  12. BZOJ_4698_Sdoi2008 Sandy的卡片_后缀数组+单调队列+双指针
  13. win10 系统 Internet Connection Sharing (ICS) 服务无法关闭-问题解决
  14. 程序员武器之键盘,适用于其他文字录入者
  15. 【科普】如何评价供应商的MES系统
  16. python pexels_从零开始学习python爬虫方法,从安装到语法基础(附赠资料)
  17. iOS开发中的锁实现猜测
  18. JavaWeb概述 [JavaWeb]
  19. A beginning Flags
  20. 考核指标在管理中心的重要性

热门文章

  1. uoj#268. 【清华集训2016】数据交互(动态dp+堆)
  2. hive-数据倾斜记录分享
  3. 使用antd报less的错误
  4. 详解动态规划最长公共子序列--JavaScript实现
  5. HDU1576 A/B (解法二)【试探法】
  6. FPP(彩包)、COEM(简包)、MOLP(license授) 介绍
  7. MongoDB学习笔记~Update方法更新集合属性后的怪问题
  8. Websphere: security-constraint in web.xml doesn't
  9. 找不到具有绑定 MetadataExchangeHttpBinding 的终结点的与方案 http 匹配的基址。注册的基址方案是 [https]...
  10. 移动端开发框架Zepto.js