首页 > 开发 > PHP > 正文

PHP编程函数安全篇

2024-05-04 22:27:40
字体:
来源:转载
供稿:网友
对于我们想做web安全的人来说,最好就是拿来学习,可是万物抓根源,我们要的不是鱼而是渔。在国内,各种各样的php程序1.0版,2.0版像雨后春笋一样的冒出来,可是,大家关注的都是一些著名的cms,论坛,blog程序,很少的人在对那些不出名的程序做安全检测,对于越来越多的php程序员和站长来说,除了依靠服务器的堡垒设置外,php程序本身的安全多少你总得懂点吧。
有人说你们做php安全无非就是搞搞注入和跨站什么什么的,大错特错,如果这样的话,一个magic_quotes_gpc或者服务器里的一些安全设置就让我们全没活路了:(。我今天要说的不是注入,不是跨站,而是存在于php程序中的一些安全细节问题。OK!切入正题。
注意一些函数的过滤
有些函数在程序中是经常使用的,像include(),require(),fopen(),fwrite(),readfile(),unlink(),eval()以及它们的变体函数等等。这些函数都很实用,实用并不代表让你多省心,你还得为它们多费点心。 :)
1.include(),require()和fopen(),include_once(),require_once()这些都可以远程调用文件,对于它们的危害,google搜一下你就会很明了,对于所包含调用的变量没过滤好,就可以任意包含文件从而去执行。举个例子,看print.php

if (empty ($bn) ) { //检查是变量$bn是否为空
include (“$cfg_dir/site_${site}.php”); //把$cfg_dir这个路径里的site_${site}.php包含进来

不管存不存在$cfg_dir目录,$site这个变量你可以很自然的去使用,因为他根本没检查$site变量啊。可以把变量$site指定远程文件去调用,也可以是本地的一个文件,你所指定的文件里写上php的语句,然后它就去包含执行这个含有php语句的文件了.就像这样
列出文件目录甚至可以扩展到包含一些管理员文件,提升权限,典型的像以前phpwind,bo-blog的漏洞一样。除了依靠php.ini里的allow_url_fopen设为off禁止远程使用文件和open_base_dir禁止使用目录以外的文件外,你还得事先声明好只能包含哪些文件,这里就不多说废话了。
2.fopen(),file(),readfile(),openfile(),等也是该特别留意的地方。函数本身并没什么,它们的作用是去打开文件,可是如果对变量过滤不彻底的话,就会泄露源代码。这样的函数文本论坛里会有很多。

$articlearray=openfile(“$dbpath/$fid/$tid.php”); //打开$dbpath/$fid这个路径的$tid.php文件
$topic_detail=explode(“|”,$articlearray[0]); //用分割符|读出帖子的内容

很眼熟吧,这是ofstar以前版本的read.php,$fid和$tid没有任何过滤,$tid指定为某个文件提交,就发生了原代码泄露。就像这样。

$tid会被加上php的后缀,所以直接写index。这仅仅是个例子,接着看吧。
3.fwrite()和它的变体函数这种漏洞想想都想得出,对于用户提交的字符没过滤的话,写入一段php后门又不是不可以。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表