最近正在开发一款基于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语句判断即可,加上百万前端工程师的美化,文末展示一下最终的效果:

基于PHP实现CMS识别的更多相关文章

  1. 基于Python使用SVM识别简单的字符验证码的完整代码开源分享

    关键字:Python,SVM,字符验证码,机器学习,验证码识别 1   概述 基于Python使用SVM识别简单的验证字符串的完整代码开源分享. 因为目前有了更厉害的新技术来解决这类问题了,但是本文作 ...

  2. 基于FPGA的肤色识别算法实现

    大家好,给大家介绍一下,这是基于FPGA的肤色识别算法实现. 我们今天这篇文章有两个内容一是实现基于FPGA的彩色图片转灰度实现,然后在这个基础上实现基于FPGA的肤色检测算法实现. 将彩色图像转化为 ...

  3. 基于MATLAB的人脸识别算法的研究

    基于MATLAB的人脸识别算法的研究 作者:lee神 现如今机器视觉越来越盛行,从智能交通系统的车辆识别,车牌识别到交通标牌的识别:从智能手机的人脸识别的性别识别:如今无人驾驶汽车更是应用了大量的机器 ...

  4. 基于FPGA的数字识别的实现

    欢迎大家关注我的微信公众号:FPGA开源工作室     基于FPGA的数字识别的实现二 作者:lee神 1 背景知识 1.1基于FPGA的数字识别的方法 通常,针对印刷体数字识别使用的算法有:基于模版 ...

  5. python 信息收集器和CMS识别脚本

    前言: 信息收集是渗透测试重要的一部分 这次我总结了前几次写的经验,将其 进化了一下 正文: 信息收集脚本的功能: 1.端口扫描 2.子域名挖掘 3.DNS查询 4.whois查询 5.旁站查询 CM ...

  6. 基于jeesite的cms系统(一):开发环境搭建

    基于jeesite的cms系统系列,是对基于jeesite进行二次开发的博客模块开发过程的总结.涉及入门安装,二次开发,部署等 一.概况: JeeSite 是一个 Java 企业级快速开发平台,基于经 ...

  7. 一个基于Net 的CMS -- Umbraco CMS

    一个基于Net 的CMS  -- Umbraco CMS:   https://umbraco.com/ Sitecore 和 EPiServer    http://www.bubuko.com/i ...

  8. prime 又一个开源的基于graphql 的cms

    prime 是一个开源的基于graphql 的cms,类似的已经又好多了,strapi 就是一个(graphql 是通过插件扩展的) graphcms 是一款不错的,但是是收费的,prime 是基于t ...

  9. [原创]K8_C段旁注查询工具5.0 30款国外主流CMS识别+智能识别未知CMS

    8_C段旁注查询工具V5.0 20161214作者:K8拉登哥哥 唯一QQ:396890445平台: Windows + .NET Framework 4.0 简介:K8_C段 提供4种方式查询子域名 ...

随机推荐

  1. MySQL8.0.20安装配置+用Navicat连接详细教程(win10,Navicat15)

    MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用 ...

  2. 23、Interpreter 解释器模式

    1.Interpreter 解释器模式 解释器模式是一种使用频率相对较低但学习难度较大的设计模式,它用于描述如何使用面向对象语言构成一个简单的语言解释器.在某些情况下,为了更好地描述某一些特定类型的问 ...

  3. C/C++陷阱与套路,当年就是折在这些地儿…

    摘要:本文结合作者的工作经验和学习心得,对C++语言的一些高级特性,做了简单介绍:对一些常见的误解,做了解释澄清:对比较容易犯错的地方,做了归纳总结:希望借此能增进大家对C++语言了解,减少编程出错, ...

  4. Python 进程与多线程

    10 进程和多线程 10.1 多进程 # -*- coding: utf-8 -*- import os pid=os.fork() print ('process (%s)start ...' %o ...

  5. drop blocks

  6. SqlServer 版本号

    RTM (no SP) SP1 SP2 SP3 SP4 SQL Server 2014      codename Hekaton  12.00.2000.8 SQL Server 2012      ...

  7. 工作流选型专项,Camunda or flowable or?

    1. 名词解释 1.1. BPM Business Process Management,业务流程管理,“通过建模.自动化.管理和优化流程,打破跨部门跨系统业务过程依赖,提高业务效率和效果”. 1.2 ...

  8. C#LeetCode刷题-动态规划

    动态规划篇 # 题名 刷题 通过率 难度 5 最长回文子串   22.4% 中等 10 正则表达式匹配   18.8% 困难 32 最长有效括号   23.3% 困难 44 通配符匹配   17.7% ...

  9. peewee的简单使用

    peewee的简单使用 peewee是一个轻量级的ORM框架,peewee完全可以应对个人或企业的中小型项目的Model层,上手容易,功能强大. 一.安装peewee模块 使用pip命令工具安装pee ...

  10. eric4 中pyqt 字符串 输入 获取

    在eric4中使用pyqt需要注意: 输入 中文 时,前面加 u ,例如: from PyQt4.QtGui import * from PyQt4.QtCore import * QMessageB ...