好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

php禁用使用系统命令的简单介绍

很多站长朋友们都不太清楚php禁用使用系统命令,今天小编就来给大家整理php禁用使用系统命令,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 linux 安全加固指的是什么? 2、 菜鸟求助:PHP中调用系统命令为何有些命令总是失败 3、 php中哪些函数不可以执行系统命令 4、 一些需要禁用的PHP危险函数(disable_functions) 5、 php 命令行模式可以禁用吗 6、 php 无法调用 windows命令行运行, linux 安全加固指的是什么?

这个涉及到有点广泛,在安全性方面,Linux内核提供了经典的Unix自主访问控制(root用户、用户ID安全机制), 以及部分支持了POSIX.1e标准草案中的Capabilities安全机制。自主访问控制(Discretionary Access Control,DAC)是指主体对客体的访问权限是由客体的属主或超级用户决定的,而且此权限一旦确定,将作为以后判断主体对客体是否有及有什么权限的惟一依据。只有客体的属主或超级用户才有权更改这些权限。传统Linux系统提供DAC支持,客体在Linux系统当中主要是指文件、目录等系统资源,主体是指访问这些资源的用户或进程。控制粒度为客体的拥有者、属组和其他人。简单说,1.文件系统及访问权限 2.用户和账号管理。3.系统审计

菜鸟求助:PHP中调用系统命令为何有些命令总是失败

PHP执行系统命令(简介及方法)

在PHP中调用外部命令,可以用如下三种方法来实现:

方法一:用PHP提供的专门函数(四个):

PHP提供4个专门的执行外部命令的函数:exec(), system(), passthru(), shell_exec()

1)exec()

原型: string exec ( string $command [, array $output [, int $return_var ]] )

说明: exec执行系统外部命令时不会输出结果,而是返回结果的最后一行。如果想得到结果,可以使用第二个参数,让其输出到指定的数组。此数组一个记录代表输出的一行。即如果输出结果有20行,则这个数组就有20条记录,所以如果需要反复输出调用不同系统外部命令的结果,最好在输出每一条系统外部命令结果时清空这个数组unset($output),以防混乱。第三个参数用来取得命令执行的状态码,通常执行成功都是返回0。

<?php

exec("dir",$output);

print_r($output);

?>

2)system()

原型: string system ( string $command [, int $return_var ] )

说明: system和exec的区别在于,system在执行系统外部命令时,直接将结果输出到游览器,如果执行命令成功则返回true,否则返回false。第二个参数与exec第三个参数含义一样。

<?php

system("pwd");

?>

3)passthru()

原型: void passthru ( string $command [, int $return_var ] )

说明: passthru与system的区别,passthru直接将结果输出到游览器,不返回任何值,且其可以输出二进制,比如图像数据。第二个参数可选,是状态码。

<?php

header("Content-type:image/gif");

passthru("/usr/bin/ppm2tiff /usr/share/tk8.4/demos/images/teapot.ppm");

?>

4)shell_exec()

原型: string shell_exec ( string $cmd )

说明: 直接执行命令$cmd

<?php

$output = shell_exec('ls -lart');

echo "<pre>$output</pre>";

?>

方法二:反撇号

原型: 反撇号`(和~在同一个键)执行系统外部命令

说明: 在使用这种方法执行系统外部命令时,要确保shell_exec函数可用,否则是无法使用这种反撇号执行系统外部命令的。

<?php

echo `dir`;

?>

方法三:用popen()函数打开进程

原型: resource popen ( string $command , string $mode )

说明: 能够和命令进行交互。之前介绍的方法只能简单地执行命令,却不能与命令交互。有时须向命令输入一些东西,如在增加系统用户时,要调用su来把当前用户换到root用户,而su命令必须要在命令行上输入root的密码。这种情况下,用之前提到的方法显然是不行的。

popen( )函数打开一个进程管道来执行给定的命令,返回一个文件句柄,可以对它读和写。返回值和fopen()函数一样,返回一个文件指针。除非使用的是单一的模式打开(读or写),否则必须使用pclose()函数关闭。该指针可以被fgets(),fgetss(),fwrite()调用。出错时,返回FALSE。

<?php

error_reporting(E_ALL);

/* Add redirection so we can get stderr. */

$handle = popen('/path/to/executable 2>1', 'r');

echo "'$handle'; " . gettype($handle) . "\n";

$read = fread($handle, 2096);

echo $read;

pclose($handle);

?>

要考虑两个问题:安全性和超时

1)安全性

由于PHP基本是用于WEB程序开发的,所以安全性成了人们考虑的一个重要方面 。于是PHP的设计者们给PHP加了一个门:安全模式。如果运行在安全模式下,那么PHP脚本中将受 到如下四个方面的限制:

执行外部命令

在打开文件时有些限制

连接MySQL数据库

基于HTTP的认证

在安全模式下,只有在特定目录中的外部程序才可以被执行,对其它程序的调用将被拒绝。这个目录可以在PhP.ini 文件中用safe_mode_exec_dir指令,或在编译PHP是加上--with-exec-dir选项来指定。

当你使用这些函数来执行系统命令时,可以使用escapeshellcmd()和escapeshellarg()函数阻止用户恶意在系统上执行命令,escapeshellcmd()针对的是执行的系统命令,而escapeshellarg()针对的是执行系统命令的参数。这两个参数有点类似addslashes()的功能。

2)超时

当执行命令的返回结果非常庞大时,可以需要考虑将返回结果输出至其他文件,再另行读取文件,这样可以显著提高程序执行的效率。

如果要执行的命令要花费很长的时间,那么应该把这个命令放到系统的后台去运行。但在默认情况下,象system()等函数要等到这个命令运行完才返回(实际上是在等命令的输出结果),这肯定会引起PHP脚本的超时。解决的办法是把命令的输出重定向到另外一个文件或流中,如:

<?php

system("/usr/local/bin/order_proc > /tmp/abc ");

?>

但我调用的DOS命令需要几分钟的时间,而且为了批处理不能简单的把结果写入文件了事,要顺序执行以下的程序

PHP设置了调用系统命令的时间限制,如果调用命令超时,虽然这个命令还是会被执行完,但PHP没有得到返回值,被终止了(最可恨的是,不显示任何错误)

修改php.ini并重启Apache以允许系统命令运行更长的时间

max_execution_time = 600

我的程序是后台运行的,逻辑OK就成了

php中哪些函数不可以执行系统命令

php中有2种函数是不可以执行系统命令的。根据查询相关公开信息显示,2种函数是assert,exception=0时,Warning:assert():assert(1==2)。Deprecated:assert():Callingassert()withastringargumentisdeprecated。

一些需要禁用的PHP危险函数(disable_functions)

phpinfo()

功能描述:输出

PHP

环境信息以及相关的模块、WEB

环境等信息。

危险等级:中

passthru()

功能描述:允许执行一个外部程序并回显输出,类似于

exec()。

危险等级:高

exec()

功能描述:允许执行一个外部程序(如

UNIX

Shell

或

CMD

命令等)。

危险等级:高

system()

功能描述:允许执行一个外部程序并回显输出,类似于

passthru()。

危险等级:高

chroot()

功能描述:可改变当前

PHP

进程的工作根目录,仅当系统支持

CLI

模式

PHP

时才能工作,且该函数不适用于

Windows

系统。

危险等级:高

scandir()

功能描述:列出指定路径中的文件和目录。

危险等级:中

chgrp()

功能描述:改变文件或目录所属的用户组。

危险等级:高

chown()

功能描述:改变文件或目录的所有者。

危险等级:高

shell_exec()

功能描述:通过

Shell

执行命令,并将执行结果作为字符串返回。

危险等级:高

proc_open()

功能描述:执行一个命令并打开文件指针用于读取以及写入。

危险等级:高

proc_get_status()

功能描述:获取使用

proc_open()

所打开进程的信息。

危险等级:高

error_log()

功能描述:将错误信息发送到指定位置(文件)。

安全备注:在某些版本的

PHP

中,可使用

error_log()

绕过

PHP

safe

mode,

执行任意命令。

危险等级:低

ini_alter()

功能描述:是

ini_set()

函数的一个别名函数,功能与

ini_set()

相同。

具体参见

ini_set()。

危险等级:高

ini_set()

功能描述:可用于修改、设置

PHP

环境配置参数。

危险等级:高

ini_restore()

功能描述:可用于恢复

PHP

环境配置参数到其初始值。

危险等级:高

dl()

功能描述:在

PHP

进行运行过程当中(而非启动时)加载一个

PHP

外部模块。

危险等级:高

pfsockopen()

功能描述:建立一个

Internet

或

UNIX

域的

socket

持久连接。

危险等级:高

syslog()

功能描述:可调用

UNIX

系统的系统层

syslog()

函数。

危险等级:中

readlink()

功能描述:返回符号连接指向的目标文件内容。

危险等级:中

symlink()

功能描述:在

UNIX

系统中建立一个符号链接。

危险等级:高

popen()

功能描述:可通过

popen()

的参数传递一条命令,并对

popen()

所打开的文件进行执行。

危险等级:高

stream_socket_server()

功能描述:建立一个

Internet

或

UNIX

服务器连接。

危险等级:中

putenv()

功能描述:用于在

PHP

运行时改变系统字符集环境。在低于

5.2.6

版本的

PHP

中,可利用该函数

修改系统字符集环境后,利用

sendmail

指令发送特殊参数执行系统

SHELL

命令。

危险等级:高

禁用方法如下:

打开/etc/php.ini文件,

查找到

disable_functions

,添加需禁用的函数名,如下:

phpinfo,eval,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen

php 命令行模式可以禁用吗

php一共分为五大运行模式:包括cgi 、fast-cgi、cli、isapi、apache 模块的 DLLCGI

CGI即通用网关接口(Common Gateway Interface),它是一段程序,通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执 行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。

CGI方式在遇到连接请求(用户 请求)先要创建cgi的子进程,激活一个CGI进程,然后处理请求,处理完后结束这个子进程。这就是fork-and-execute模式。所以用cgi 方式的服务器有多少连接请求就会有多少cgi子进程,子进程反复加载是cgi性能低下的主要原因。都会当用户请求数量非常多时,会大量挤占系统的资源如内 存,CPU时间等,造成效能低下。CGI-FCGI

fast-cgi 是cgi的升级版本,FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI进程管理器进行管理。FastCGI的工作原理

1、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)

2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。

3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。

4、 FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。在上述情况中,你可以想象CGI通常有多慢。每一个Web 请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的 好处是,持续数据库连接(Persistent database connection)可以工作。APACHE2HANDLER

PHP作为Apache模块,Apache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦有请求出 现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造成的延迟了。这些服务器副本在处理完一次HTTP请求之后并不立即退出,而是停留在计 算机中等待下次请求。对于客户浏览器的请求反应更快,性能较高。

apache模块的DLL:

该运行模式是我们以前在windows环境下使用apache服务器经常使用的,而在模块化(DLL)中,PHP是与Web服务器一起启动并运行的。(是apache在CGI的基础上进行的一种扩展,加快PHP的运行效率)ISAPI:

ISAPI即Internet Server Application Program Interface,是微软提供的一套面向Internet服务的API接口

一个ISAPI的DLL,可以在被用户请求激活后长驻内存,等待用户的另一个请求,还可以在一个DLL里设置多个用户请求处理函数,此外,

ISAPI的DLL应用程序和WWW服务器处于同一个进程中,效率要显著高于CGI。(由于微软的排他性,只能运行于windows环境)cli:

cli是php的命令行运行模式,大家经常会使用它,但是可能并没有注意到(例如:我们在linux下经常使用 “php -m”查找PHP安装了那些扩展就是PHP命令行运行模式;有兴趣的同学可以输入php -h去深入研究该运行模式)总结:

每种运行模式都有自己的优缺点,没有绝对的好与坏,主要是看大家处理何种环境。

php 无法调用 windows命令行运行,

a/ 试试变成绝对路径或 a/d.txt 这种形式

另外,你到底是在linux还是windows运行的?

windows下没有cp命令,如果你在windows下还可以尝试

system("cmd.exe /c copy d:\\d.txt d:\\a\\d.txt");

如果只是要完成复制文件的功能,完全可以使用

php自带的copy("源文件","目标文件")函数

关于php禁用使用系统命令的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于php禁用使用系统命令的简单介绍的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did225860
更新时间:2023-05-11   阅读:20次

上一篇: php图文识别 php识别图片二维码

下一篇:刷新指定PHP页面 刷新指定页面 js

最新资料更新

  • 1.vscode开发php vscode开发JAVA方便吗
  • 2.最新php环境搭建 最新php环境搭建方案
  • 3.php的sql累加 sql实现累加
  • 4.php判断字符串的编码 php 判断字符串是否存在某个字符串
  • 5.什么是php行为 什么是php,php有哪些优点
  • 6.php数据库名字大小写 php函数名称区分大小写吗
  • 7.php系统源代码下载 php源码免费下载
  • 8.php字母循序排列 php字符串排序
  • 9.php怎么操作树 php tree
  • 10.phpurl链接解析 php解析url
  • 11.phprsa密钥拼接 rsa加密解密
  • 12.php函数补全 php自动补全
  • 13.php使用嵌套for php解析嵌套json
  • 14.php怎样打开url php链接怎么打开
  • 15.php网站界面代码 php网页
  • 16.仿win桌面php源码 仿windows桌面
  • 17.php的token请求 php简单的token验证
  • 18.php7.1des加密 php7 加密
  • 19.php下载liunx php下载器
  • 20.JavaPHP你好 java welcome

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]