PHP中关于系统相关函数的应用

Posted ricky_zhu_li_ke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP中关于系统相关函数的应用相关的知识,希望对你有一定的参考价值。

string   shell_exec  (  string $cmd  ); 等同于执行系统命令行。不能用于检测命令是否执行成功。因为出错或者命令本身不产生输出,对于不产生输出的命令就无法检测是否执行成功。如果有这方面的要求,可以使用exec代替这个函数。 string   exec  (  string $command  [,  array &$output  [,  int &$return_var  ]] ) exec函数只会输出输出结果的最后一行,并不能完整的输出结果。推荐用system函数
把字符串转码为可以在 shell 命令里使用的参数 string   escapeshellarg  (  string $arg  ) shell 元字符转义 string   escapeshellcmd  (  string $command  ) escapeshellcmd()  对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到  exec()  或  system()  函数,或者  执行操作符  之前进行转义。 passthru函数常用于输出图像。因为这个函数可以输出原始的二进制流信息。   如果想对执行一个命令比popen有更好的控制,那就是使用proc_open函数代替popen函数。主要是proc_open的参数更多。 所以对于进程命令的执行推荐使用proc_open.不过一般服务器为了防止意外,所以与系统有关的函数都是被禁止的。
proc_open相关函数的运用 http://www.cppblog.com/amazon/archive/2011/12/01/161281.aspx http://blog.lifezq.com/pma/procopen.html
最后来讲一个使用这个系统函数escapeshellcmd过滤之后仍然会产生的一个漏洞: php escapeshellcmd多字节编码漏洞解析及延伸 http://www.xfocus.net/articles/200805/979.html
试验过程: 正常情况下: $e = escapeshellcmd($_GET[ 'c' ]);
// here we don't care if $e has spaces
$result = system(
"echo $e " ); echo $result; 在浏览器地址栏输入:xxxxx.php?c=loveshell%bf;id; 输出的结果是
loveshell乱码;id
如果加入一行代码putenv(“LANG=zh_CN.GBK"); // GBK编码下就会出问题
putenv(
"LANG=zh_CN.GBK" );
$e = escapeshellcmd($_GET[
'c' ]);
// here we don't care if $e has spaces
$result = system(
"echo $e " ); echo $result; 输出结果就是
l loveshell縗 uid=99(nobody) gid=4294967295 groups=4294967295 
这个id命令就执行了。 这个问题和那个escapeshellcmd无关。因为这个和linux对不同编码下面对php的参数理解不一样。

以上是关于PHP中关于系统相关函数的应用的主要内容,如果未能解决你的问题,请参考以下文章

js中关于闭包的那些相关知识点

在PHP中操作临时文件

Verilog中关于文件操作的系统任务

Verilog中关于文件操作的系统任务

php中关于&& or 的用法???

php中关于empty()函数是否为真的判断