BlogEz是一款免费的PHP博客系统,页面非常漂亮,功能也很齐全。目前有比较多的网站采用了这套系统作为自己的网上家园。在看完所有的代码后,我发现其安全性还是不错的,该系统的程序员对脚本方面的一些基本安全问题都考虑到了,不过由于他的疏忽,还是有几个地方存在一些问题,可能导致非法入侵。下面我们就一起来看一下。
comment.php文件的作用是对文章进行评论,它只对ID进行了过滤,其他地方过滤的很简单,可以轻易地绕过。其代码如下:
| 以下是引用片段: if (isset($_POST['verify']) && ($_POST['verify']==$_SESSION['session_verify'])){ if(isset($_POST['blogid'])){ $blogid=intval($_POST['blogid']); '把ID转换成整数 $url=($setting['buildhtml']=='yes')?"$setting[siteurl]/archives/$blogid.html#comment":"index.php?action=blog&bid=$blogid#comment"; $author=trim($_POST['author']); '没有进行任何过滤 $parseurl=isset($_POST['url'])?trim($_POST['url']):'no'; $useubb=isset($_POST['ubbcode'])?trim($_POST['ubbcode']):'no'; $usesmile=isset($_POST['smile'])?trim($_POST['smile']):'no'; $content=trim($_POST['content']); $time=time(); $ip=realip(); $ischecked=($setting['checkcomment']=='yes')?'no':'yes'; $sql="Insert INTO `".$table_prefix."comment`(blogid,ischecked,author,content,addtime,ip,parseurl,useubb,usesmile)VALUES('".intval($blogid)."','$ischecked','".addslashes($author)."','".addslashes($content)."','$time','".addslashes($ip)."','$parseurl','$useubb','$usesmile')"; |
从上面的代码可以看出,程序就是用addslashes()和intval()进行简单的转换,并没有进行字符的过滤,虽然说在一定程度上可以防止漏洞的出现,但总感觉没有本质的提高。在转换之后就直接把数据插入到数据库当中,这样就出现了跨站漏洞,可以用来挂马。
gbook.php是该系统的留言版文件,在处理用户留言时,同样没有对输入的字符进行认真过滤。其代码如下:
| 以下是引用片段: $user=trim($_POST['author']); $email=trim($_POST['email']); $img=trim($_POST['face']); $hidden=isset($_POST['hiddengbook'])?'yes':'no'; $parseurl=isset($_POST['url'])?trim($_POST['url']):'no'; $useubb=isset($_POST['ubbcode'])?trim($_POST['ubbcode']):'no'; $usesmile=isset($_POST['smile'])?trim($_POST['smile']):'no'; $content=trim($_POST['content']); $ip=realip(); '获取真实IP地址 $addtime=time(); $sql="Insert INTO `".$table_prefix."gbook` (user,img,email,hidden,parseurl,useubb,usesmile,content,ip,addtime)VALUES('".addslashes ($user)."','".addslashes($img)."','".addslashes($email)."','".addslashes ($hidden)."','$parseurl','$useubb','$usesmile','".addslashes($content)."','$ip','$addtime')"; //echo $sql; |
从以上代码可见,它存在着很严重的跨站漏洞,如图3所示,并且可以用来挂马。不过这里输入挂马代码之后,会导致其他的留言也看不到了,并且挂马的网站打开之后是一片空白。比如我们输入
| 以下是代码片段: |
之后,显示的空白。