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 相关文章推荐
PHP中用正则表达式清除字符串的空白
Jan 17 PHP
php漏洞之跨网站请求伪造与防止伪造方法
Aug 15 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
Mar 08 PHP
PHP图片库imagemagick安装方法
Sep 23 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
Apr 07 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
May 16 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
谈谈php对接芝麻信用踩的坑
Dec 01 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
Jun 03 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
PHP生成月历代码
2007/06/14 PHP
php获取远程图片体积大小的实例
2013/11/12 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
php构造函数与析构函数
2016/04/23 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
锋利的jQuery jQuery中的DOM操作
2010/03/21 Javascript
学习面向对象之面向对象的术语
2010/11/30 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
2015/12/24 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
ECMAScript6 新特性范例大全
2017/03/24 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
JS实现页面数据懒加载
2020/02/13 Javascript
JavaScript 禁止用户保存图片的实现代码
2020/04/28 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
Python实现抓取HTML网页并以PDF文件形式保存的方法
2018/05/08 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
在IPython中执行Python程序文件的示例
2018/11/01 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
python给list排序的简单方法
2020/12/10 Python
税务职业生涯规划书范文
2014/09/16 职场文书
2015年档案管理工作总结
2015/04/08 职场文书
警示教育观后感
2015/06/17 职场文书
趣味运动会加油词
2015/07/18 职场文书
2016年九九重阳节活动总结
2016/04/01 职场文书