• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

基于PHP实现CMS识别

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
最近正在开发一款基于PHP实现的Web安全检测平台,写到了CMS识别这一功能,便写一篇文章总结一下。
首先需要梳理的是CMS识别的几种方法:
1.网页源代码特征:例如源代码中包含CMS的名称或是某种特定关键词。
 

 

 

2.路径/文件特征:例如DeDe织梦系统存在/dede/路径与advancedsearch.php文件。

 

3.版权信息特征:在网页底部的版权信息中往往会包含CMS信息,这种特征在我们接下来的编程中可以包含在"网页源代码特征"中。

 

4.robots.txt特征:部分CMS的robots.txt文件中会包含CMS信息,例如Discuz论坛系统。

 

 

除了这四种特征以外,还有其他的一些特征这里就不多阐述了,我们接下来就要围绕这4种特征来实现基于PHP的CMS识别功能。
在开始编程前,我们先根据4种特征来设计一下各自识别CMS的编程思路:
 
1.网页源代码特征:发送请求获取网页源码 -> 利用正则匹配关键词
2.路径/文件特征:发送请求获取HTTP状态码 -> 根据HTTP状态码判断路径/文件是否存在
3.版权信息特征:发送请求获取网页源码 -> 利用正则匹配关键词(与网页源代码特征编程思路相同)
4.robots.txt特征: 发送请求获取HTTP状态码 -> 根据HTTP状态码判断robots.txt文件是否存在 -> 若存在则使用正则匹配关键词
 
以上便是4种特征的编程实现思路,同时,为了保证识别的准确性,我们需要对一个CMS添加多种识别方式,防止漏报或误报:
例如判断DeDe织梦系统时,我们除了可以依据robots.txt文件存在"Disallow: /plus/"这一关键词判断外,还可以检测源代码中是否存在"dedeajax"的关键词,只要满足以上任一条件即可判定为DeDe织梦系统。
下面开始编写我们的主要几个功能:
 
//获取HTTP状态码函数:
    function requests_code($url){
        $curl = curl_init();
        $header = array("Connection: Keep-Alive","Accept: text/html, application/xhtml+xml, */*", "Pragma: no-cache", "Accept-Language: zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3","User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, 1);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        curl_setopt($curl,CURLOPT_NOBODY,true);
        curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_exec($curl);
        $code = curl_getinfo($curl,CURLINFO_HTTP_CODE);
        curl_close($curl);
        return $code;
    }
 
//获取网页源代码正则匹配函数:
    function contents_match($url, $regex){
        $curl = curl_init();
        $header = array("Connection: Keep-Alive","Accept: text/html, application/xhtml+xml, */*", "Pragma: no-cache", "Accept-Language: zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3","User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
        curl_setopt($curl, CURLOPT_URL,$url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        $data = curl_exec($curl);
        curl_close ($curl);
        if(preg_match($regex, $data)){
            return True;
        }else{
            return False;
        }
    }


以上两个功能我们使用自定义函数实现能使代码更加简介易懂,接下来我们开始编写不同CMS的识别策略:

 
    //Discuz论坛系统网站特征
    function dz($url){
        $regex = "/Discuz/i";
        if(contents_match($url, $regex)){  //网页源代码特征
            return True;
        }elseif(contents_match($url.'/robots.txt', $regex)){  //robots.txt文件特征
            return True;
        }else{
            return False;
        }
    }
 
    //ECshop网店商城系统网站特征
    function ecshop($url){
        $contents_regex = "/process_request/";
        $path = "/themes/default/images/logo.gif";
        if(contents_match($url, $contents_regex)){  //网页源代码特征
            return True;
        }else if(requests_code($url.$path) == 200){  //robots.txt文件特征
            return True;
        }else{
            return False;
        }
    }
这里就展示两种CMS的识别方式,如果对更多CMS识别有兴趣可以联系笔者一起交流。这样我们就实现了PHP识别CMS的核心程序,接下来只需要调用各个函数使用if语句判断即可,加上百万前端工程师的美化,文末展示一下最终的效果:

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
php毫秒时间戳发布时间:2022-07-10
下一篇:
PHP安全编程:主机文件目录浏览(转)发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap