PHP执行系统命令函数实例讲解


Posted in PHP onMarch 03, 2021

命令注入

命令注入(Command Injection),对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者 bash 命令)的一种注入攻击手段。

常见的执行系统命令的函数有

  • system()
  • passthru()
  • exec()
  • shell_exec()
  • popen()
  • proc_open()
  • pcntl_exec()

system()函数

string system ( string $command [, int &$return_var ] )

$command为执行的命令,&return_var可选,用来存放命令执行后的状态码

system()函数执行有回显,将执行结果输出到页面上

passthru()函数

void passthru ( string $command [, int &$return_var ] )

和system函数类似,$command为执行的命令,&return_var可选,用来存放命令执行后的状态码

执行有回显,将执行结果输出到页面上

exec()函数

string exec ( string $command [, array &$output [, int &$return_var ]] )

$command是要执行的命令

$output是获得执行命令输出的每一行字符串,$return_var用来保存命令执行的状态码(检测成功或失败)

exec()函数执行无回显,默认返回最后一行结果

shell_exec()函数

string shell_exec( string &command)

&command是要执行的命令

shell_exec()函数默认无回显,通过 echo 可将执行结果输出到页面

反引号 ` 

shell_exec() 函数实际上仅是反撇号 (`) 操作符的变体,当禁用shell_exec时,` 也不可执行

在php中称之为执行运算符,PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回

popen()函数

resource popen ( string $command , string $mode )

函数需要两个参数,一个是执行的命令command,另外一个是指针文件的连接模式mode,有rw代表读和写。

函数不会直接返回执行结果,而是返回一个文件指针,但是命令已经执行。

popen()打开一个指向进程的管道,该进程由派生给定的command命令执行而产生。

返回一个和fopen()所返回的相同的文件指针,只不过它是单向的(只能用于读或写)并且必须用pclose()来关闭。

此指针可以用于fgets()fgetss()和 fwrite()

> c:/1.txt', 'r' ); ?>

proc_open()函数

resource proc_open (string $cmd ,array $descriptorspec ,array &$pipes [, string $cwd [, array $env [, array $other_options ]]])

与Popen函数类似,但是可以提供双向管道

pcntl_exec()函数

void pcntl_exec ( string $path [, array $args [, array $envs ]] )

path是可执行二进制文件路径或一个在文件第一行指定了 一个可执行文件路径标头的脚本
args是一个要传递给程序的参数的字符串数组。

pcntllinux下的一个扩展,需要额外安装,可以支持 php 的多线程操作。

pcntl_exec函数的作用是在当前进程空间执行指定程序,版本要求:PHP > 4.2.0

对这些危险函数,可以在php.ini中禁用,进行安全加固

PHP执行系统命令函数实例讲解

到此这篇关于PHP执行系统命令函数实例讲解的文章就介绍到这了,更多相关PHP执行系统命令函数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
PHPMYADMIN导入数据最大为2M的解决方法
Apr 23 PHP
PHP flush()与ob_flush()的区别详解
Jun 03 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
Apr 30 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
Nov 06 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
Dec 04 PHP
PHP实现简单汉字验证码
Jul 28 PHP
php metaphone()函数的定义和用法
May 15 PHP
PHP文件上传处理案例分析
Oct 15 PHP
Yii2下点击验证码的切换实例代码
Mar 14 PHP
PHP中__set()实例用法和基础讲解
Jul 23 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
Dec 12 PHP
PHP数组Key强制类型转换实现原理解析
Sep 01 PHP
Git命令之分支详解
Mar 02 #PHP
PHP之header函数详解
Mar 02 #PHP
laravel与thinkphp之间的区别与优缺点
Mar 02 #PHP
php中array_fill函数的实例用法
Mar 02 #PHP
PHP网站常见安全漏洞,及相应防范措施总结
Mar 01 #PHP
php框架知识点的整理和补充
Mar 01 #PHP
Docker 安装 PHP并与Nginx的部署实例讲解
Feb 27 #PHP
You might like
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
php统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
PHP缓存技术的使用说明
2011/08/06 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
2017/07/23 Javascript
vue 实现全选全不选的示例代码
2018/03/29 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
webpack4 SplitChunks实现代码分隔详解
2019/05/23 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
JS制作简易计算器的实例代码
2020/07/04 Javascript
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
Python实现好友全头像的拼接实例(推荐)
2017/06/24 Python
用Python写脚本,实现完全备份和增量备份的示例
2018/04/29 Python
浅析PEP572: 海象运算符
2019/10/15 Python
Python通过递归获取目录下指定文件代码实例
2019/11/07 Python
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
化学实验员岗位职责
2013/12/28 职场文书
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
2014年监理工作总结范文
2014/11/17 职场文书
滴水洞导游词
2015/02/10 职场文书
学生乘坐校车安全责任书
2015/05/11 职场文书
2015军训通讯稿大全
2015/07/18 职场文书
小学运动会报道稿
2015/07/22 职场文书
Javascript之datagrid查询详解
2021/09/15 Javascript
Meta增速拉垮,元宇宙难当重任
2022/04/29 数码科技