首页 > 后端开发 > 正文

对于php中的shell_exec()函数执行过程的疑问? PHP 危险函数解释

2024-10-23 19:20:33 | 我爱编程网

对于php中的shell_exec()函数执行过程的疑问? PHP 危险函数解释相关内容,小编在这里做了整理,希望能对大家有所帮助,关于对于php中的shell_exec()函数执行过程的疑问? PHP 危险函数解释信息,一起来了解一下吧!

本文目录一览:

对于php中的shell_exec()函数执行过程的疑问? PHP 危险函数解释

对于php中的shell_exec()函数执行过程的疑问?

执行过程疑问:在PHP中,关于shell_exec()函数的执行机制,可能存在一些混淆。

exec()系列函数的功能在于替换当前进程的执行环境,包括代码段、初始化数据段、非初始化数据段和栈都会被替换。

然而,针对shell_exec的解释却有所不同。它仅通过shell执行命令并将结果作为字符串返回,它并未实现替换当前进程的机制。因此,循环执行命令后,程序依然可以运行到第二轮。

尝试执行如下代码,执行时间大约在10秒左右,可能略高于10秒。

使用microtime()获取的时间戳,格式为小数在前整数在后。此函数返回的字符串类型,直接相减将产生类型错误。

尝试进行字符串间的减法运算,会触发PHP的警告信息。

错误示例:PHP Notice: A non well formed numeric value encountered...

对于字符串 "0.51262900 1517129110" 和 "0.51262900 1517129100" 进行减法运算,正确的理解是应当忽略字符串格式,仅考虑数值部分进行运算。

对于php中的shell_exec()函数执行过程的疑问? PHP 危险函数解释

PHP 危险函数解释

在编译 PHP 时,如无特殊需要,一定禁止编译生成 CLI 命令行模式的 php 解析支持。
可在编译时使用 –disable-cli。一旦编译生成 CLI 模式的 PHP,则可能会被入侵者
利用该程序建立一个 WEB Shell 后门进程或通过 PHP 执行任意代码!

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 命令。
危险等级:高

对于php中的shell_exec()函数执行过程的疑问? PHP 危险函数解释

11种php编程典型安全隐患及处理

我爱编程网(https://www.52biancheng.com)小编还为大家带来11种php编程典型安全隐患及处理的相关内容。

PHP本身再老版本有一些问题 比如在 php 和php 以前有一些比较严重的bug 所以推荐使用新版 另外 目前闹的轰轰烈烈的SQL Injection也是在PHP上有很多利用方式 所以要保证安全 PHP代码编写是一方面 PHP的配置更是非常关键

我们php手手工安装的 php的默认配置文件在 /usr/local/apache /conf/php ini 我们最主要就是要配置php ini中的内容 让我们执行php能够更安全 整个PHP中的安全设置主要是为了防止phpshell和SQL Injection的攻击 一下我们慢慢探讨 我们先使用任何编辑工具打开/etc/local/apache /conf/php ini 如果你是采用其他方式安装 配置文件可能不在该目录

( ) 打开php的安全模式

php的安全模式是个非常重要的内嵌的安全机制 能够控制一些php中的函数 比如system()

同时把很多文件操作函数进行了权限控制 也不允许对某些关键文件的文件 比如/etc/passwd

但是默认的php ini是没有打开安全模式的 我们把它打开

safe_mode = on

( ) 用户组安全

当safe_mode打开时 safe_mode_gid被关闭 那么php脚本能够对文件进行访问 而且相同

组的用户也能够对文件进行访问

建议设置为

safe_mode_gid = off

如果不进行设置 可能我们无法对我们服务器网站目录下的文件进行操作了 比如我们需要

对文件进行操作的时候

( ) 安全模式下执行程序主目录

如果安全模式打开了 但是却是要执行某些程序的时候 可以指定要执行程序的主目录

safe_mode_exec_dir = D:/usr/bin

一般情况下是不需要执行什么程序的 所以推荐不要执行系统程序目录 可以指向一个目录

然后把需要执行的程序拷贝过去 比如

safe_mode_exec_dir = D:/tmp/cmd

但是 我更推荐不要执行任何程序 那么就可以指向我们网页目录

safe_mode_exec_dir = D:/usr/

( ) 安全模式下包含文件

如果要在安全模式下包含某些公共文件 那么就修改一下选项

safe_mode_include_dir = D:/usr//include/

其实一般php脚本中包含文件都是在程序自己已经写好了 这个可以根据具体需要设置

( ) 控制php脚本能访问的目录

使用open_basedir选项能够控制PHP脚本只能访问指定的目录 这样能够避免PHP脚本访问

不应该访问的文件 一定程度上限制了phpshell的危害 我们一般可以设置为只能访问网站目录

open_basedir = D:/usr/

( ) 关闭危险函数

如果打开了安全模式 那么函数禁止是可以不需要的 但是我们为了安全还是考虑进去 比如

我们觉得不希望执行包括system()等在那的能够执行命令的php函数 或者能够查看php信息的

phpinfo()等函数 那么我们就可以禁止它们

disable_functions = system passthru exec shell_exec popen phpinfo

如果你要禁止任何文件和目录的操作 那么可以关闭很多文件操作

disable_functions = chdir chroot dir getcwd opendir readdir scandir fopen unlink delete copy mkdir rmdir rename file file_get_contents fputs fwrite chgrp chmod chown

以上只是列了部分不叫常用的文件处理函数 你也可以把上面执行命令函数和这个函数结合

就能够抵制大部分的phpshell了

( ) 关闭PHP版本信息在头中的泄漏 我爱编程网

我们为了防止黑客获取服务器中php版本的信息 可以关闭该信息斜路在头中

expose_php = Off

比如黑客在 telnet chinaz 的时候 那么将无法看到PHP的信息

( ) 关闭注册全局变量

在PHP中提交的变量 包括使用POST或者GET提交的变量 都将自动注册为全局变量 能够直接访问

这是对服务器非常不安全的 所以我们不能让它注册为全局变量 就把注册全局变量选项关闭

register_globals = Off

当然 如果这样设置了 那么获取对应变量的时候就要采用合理方式 比如获取GET提交的变量var

那么就要用$_GET[’var’]来进行获取 这个php程序员要注意

( ) 打开magic_quotes_gpc来防止SQL注入

SQL注入是非常危险的问题 小则网站后台被入侵 重则整个服务器沦陷

所以一定要小心 php ini中有一个设置

magic_quotes_gpc = Off

这个默认是关闭的 如果它打开后将自动把用户提交对sql的查询进行转换

比如把 ’ 转为 ’等 这对防止sql注射有重大作用 所以我们推荐设置为

magic_quotes_gpc = On

( ) 错误信息控制

一般php在没有连接到数据库或者其他情况下会有提示错误 一般错误信息中会包含php脚本当

前的路径信息或者查询的SQL语句等信息 这类信息提供给黑客后 是不安全的 所以一般服务器建议禁止错误提示

display_errors = Off

如果你却是是要显示错误信息 一定要设置显示错误的级别 比如只显示警告以上的信息

error_reporting = E_WARNING & E_ERROR

当然 我还是建议关闭错误提示

( ) 错误日志

建议在关闭display_errors后能够把错误信息记录下来 便于查找服务器运行的原因

log_errors = On

同时也要设置错误日志存放的目录 建议根apache的日志存在一起

error_log = D:/usr/local/apache /logs/php_error log

注意 给文件必须允许apache用户的和组具有写的权限

MYSQL的降权运行

新建立一个用户比如mysqlstart

net user mysqlstart ****microsoft /add

net localgroup users mysqlstart /del

不属于任何组

如果MYSQL装在d:mysql 那么 给 mysqlstart 完全控制 的权限

然后在系统服务中设置 MYSQL的服务属性 在登录属性当中 选择此用户 mysqlstart 然后输入密码 确定

重新启动 MYSQL服务 然后MYSQL就运行在低权限下了

如果是在windos平台下搭建的apache我们还需要注意一点 apache默认运行是system权限

这很恐怖 这让人感觉很不爽 那我们就给apache降降权限吧

net user apache ****microsoft /add

net localgroup users apache /del

ok 我们建立了一个不属于任何组的用户apche

我们打开计算机管理器 选服务 点apache服务的属性 我们选择log on 选择this account 我们填入上面所建立的账户和密码

重启apache服务 ok apache运行在低权限下了

实际上我们还可以通过设置各个文件夹的权限 来让apache用户只能执行我们想让它能干的事情 给每一个目录建立一个单独能读写的用户

lishixinzhi/Article/program/PHP/201311/21195

以上就是对于php中的shell_exec()函数执行过程的疑问? PHP 危险函数解释全部内容了,了解更多相关信息,关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
标签: PHP
与“对于php中的shell_exec()函数执行过程的疑问? PHP 危险函数解释”相关推荐
php函数运行原理 对于php中的shell_exec()函数执行过程的疑问?
php函数运行原理 对于php中的shell_exec()函数执行过程的疑问?

求PHP高手解析一下shuffle函数的实现原理你好,shuffle函数是随机变换数组元素位置,其实思路很简单,我们知道数组都可以计算其长度,$len=count($array)以后,我们只要用循环配合rand(0,$len)随机出一个位置,保存到一个新数组当中,因为在循环中,随机出来的位置可能一样,这时判断该随机位置有没在数组中,若有继续rand,没有则存进数组,直到个数够了,然后在逐个a

2025-01-10 16:12:03
php中的几个输出函数(对于php中的shell_exec()函数执行过程的疑问?)
php中的几个输出函数(对于php中的shell_exec()函数执行过程的疑问?)

php中的几个输出函数1echo();2print();3die();4printf();5sprintf();6print_r();7var_dump();1echo()可以同时输出多个字符串,可以多个参数,并不需要圆括号,无返回值。2print()只可以同时输出一个字符串,一个参数,需要圆括号,有返回值,当其执行失败时返flase.print的用法和C语言很像,所以会对输

2025-02-11 07:57:21
云引擎AEC安全禁用函数 对于php中的shell_exec()函数执行过程的疑问?
云引擎AEC安全禁用函数 对于php中的shell_exec()函数执行过程的疑问?

云引擎AEC安全禁用函数禁用的函数PHPOptionsandInformation:dlget_current_userget_magic_quotes_runtimeset_magic_quotes_runtime获取脚本用户及资源信息:get_mygidget_myinodeget_mypidget_myuidgetoptgetrusage

2024-11-11 20:43:21
PHP 危险函数解释 phprequire_once()
PHP 危险函数解释 phprequire_once()

PHP危险函数解释在编译PHP时,如无特殊需要,一定禁止编译生成CLI命令行模式的php解析支持。可在编译时使用–disable-cli。一旦编译生成CLI模式的PHP,则可能会被入侵者利用该程序建立一个WEBShell后门进程或通过PHP执行任意代码!phpinfo()功能描述:输出PHP环境信息以及相关的模块、WEB环境等信息。危险等级:中passthru()

2024-10-15 09:17:45
PHP直接调用函数和调用另外一个文件中的函数的区别 对于php中的shell_exec()函数执行过程的疑问?
PHP直接调用函数和调用另外一个文件中的函数的区别 对于php中的shell_exec()函数执行过程的疑问?

PHP直接调用函数和调用另外一个文件中的函数的区别//如果是PHP文件中的函数,唯一的区别是:先引入外部文件,然后直接调用。//如果是外部类文件中的函数,需要引入,然后new 对象后,再调用该对象的函数。$msg=test_msg();function test_msg(){echo "";}//调用外部文件中的函数//首先引入文件include_once 'file.php';$msg=t

2025-01-24 22:39:51
关于php递归函数创建级联目录的困惑(php中mkdir函数疑问)
关于php递归函数创建级联目录的困惑(php中mkdir函数疑问)

关于php递归函数创建级联目录的困惑mkdir1刚进去就是判断$dir存不存在,a/b/c/d/e说白了就是判断有没有e文件夹如果没有继续dirname($dir)判断a/b/c/d路径的d文件夹有没有如果没有继续dirname($dir)判断扮闷御a/b/c路径的c文厅岩件夹有没有依此类推直到dirname($dir)判断a路径的时候不存在执行当前递归层罩如的mkdir($

2024-12-02 00:02:31
关于php程序的问题 php对数据进行数据处理?
关于php程序的问题 php对数据进行数据处理?

php常识选择题1.PHP选择题选择B。PHP是一种简单的,面向对象的,解释型的,健壮的,安全的,性能非常之高的,独立于架构的,可移植的,动态的脚本语言。PHP具有和JAVA类似的Class关键字。因为不需要虚拟机,以致速度比JAVA快5倍。PHP正迅速变成一种标准的,多用途的,面向对象的脚本语言。PHP不仅可用来开发Web应用程序,也可以开发普通应用程序。PHP是一种

2024-10-05 17:37:49
php函数chr php的ord与chr函数疑问
php函数chr php的ord与chr函数疑问

java中有像其他语言中的chr函数么php: chr()函数从指定的ASCII值返回字符。据我所知在java中没有直接的函数,但是可以很简单的得到结果,需要强制转换。例如:String str = String.valueOf((char)61);String str2= String.valueOf((char)0x61);php的ord与chr函数疑问楼主你错了

2024-09-01 23:08:05