Web指纹识别技术研究与优化实现(CMS)

2023-10-27

本文通过分析web指纹的检测对象、检测方法、检测原理及常用工具,设计了一个简易的指纹搜集脚本来协助发现新指纹,并提取了多个开源指纹识别工具的规则库并进行了规则重组,开发了一个简单快捷的指纹识别小工具TideFinger,并实现了一套在线的指纹识别平台“潮汐指纹”,希望能为大家带来方便。

前言

在web渗透过程中,Web指纹识别是信息收集环节中一个比较重要的步骤,通过一些开源的工具、平台或者手工检测CMS系统是公开的CMS程序还是二次开发至关重要,能准确的获取CMS类型、Web服务组件类型及版本信息可以帮助安全工程师快速有效的去验证已知漏洞。

在指纹识别的学习过程中,借用了很多开源的工具和指纹库,如fofa、WhatWeb、w11scan、WebEye、御剑等等,在此感谢各种大佬的无私奉献。本文并无技术上的创新和突破,只是把一些指纹库重新进行了整合和梳理并进行了开源。

tips:文末有福利~我们将搜集到的一些指纹工具、指纹库等资料打包供大家下载~

常见指纹检测的对象

1、CMS信息:比如大汉CMS、织梦、帝国CMS、phpcms、ecshop等;

2、前端技术:比如HTML5、jquery、bootstrap、pure、ace等;

3、Web服务器:比如Apache、lighttpd, Nginx, IIS等;

4、应用服务器:比如Tomcat、Jboss、weblogic、websphere等;

5、开发语言:比如PHP、Java、Ruby、Python、C#等;

6、操作系统信息:比如linux、win2k8、win7、kali、centos等;

7、CDN信息:是否使用CDN,如cloudflare、360cdn、365cyd、yunjiasu等;

8、WAF信息:是否使用waf,如Topsec、Jiasule、Yundun等;

9、IP及域名信息:IP和域名注册信息、服务商信息等;

10、端口信息:有些软件或平台还会探测服务器开放的常见端口。

常见的指纹识别方式

1、特定文件的MD5

一些网站的特定图片文件、js文件、CSS等静态文件,如favicon.ico、css、logo.ico、js等文件一般不会修改,通过爬虫对这些文件进行抓取并比对md5值,如果和规则库中的Md5一致则说明是同一CMS。这种方式速度比较快,误报率相对低一些,但也不排除有些二次开发的CMS会修改这些文件。

2、正常页面或错误网页中包含的关键字

先访问首页或特定页面如robots.txt等,通过正则的方式去匹配某些关键字,如Powered by Discuz、dedecms等。

或者可以构造错误页面,根据报错信息来判断使用的CMS或者中间件信息,比较常见的如tomcat的报错页面。

3、请求头信息的关键字匹配

根据网站response返回头信息进行关键字匹配,whatweb和Wappalyzer就是通过banner信息来快速识别指纹,之前fofa的web指纹库很多都是使用的这种方法,效率非常高,基本请求一次就可以,但搜集这些规则可能会耗时很长。而且这些banner信息有些很容易被改掉。

根据response header一般有以下几种识别方式:

(1)查看http响应报头的X-Powered-By字段来识别;

(2)根据Cookies来进行判断,比如一些waf会在返回头中包含一些信息,如360wzws、Safedog、yunsuo等;

(3)根据header中的Server信息来判断,如DVRDVS-Webs、yunjiasu-nginx、Mod_Security、nginx-wallarm等;

(4)根据WWW-Authenticate进行判断,一些路由交换设备可能存在这个字段,如NETCORE、huawei、h3c等设备。

4、部分URL中包含的关键字,比如wp-includes、dede等URL关键特征

通过规则库去探测是否有相应目录,或者根据爬虫结果对链接url进行分析,或者对robots.txt文件中目录进行检测等等方式,通过url地址来判别是否使用了某CMS,比如wordpress默认存在wp-includes和wp-admin目录,织梦默认管理后台为dede目录,solr平台可能使用/solr目录,weblogic可能使用wls-wsat目录等。

5、开发语言的识别

web开发语言一般常见的有PHP、jsp、aspx、asp等,常见的识别方式有:

(1)通过爬虫获取动态链接进行直接判断是比较简便的方法。

asp判别规则如下 <a[^>]*?href=('|")[^http][^>]*?\.asp(\?|\#|\1) ,其他语言可替换相应asp即可。

(2)通过 X-Powered-By 进行识别

比较常见的有 X-Powered-By: ASP.NET 或者 X-Powered-By: PHP/7.1.8

(3)通过 Set-Cookie 进行识别

这种方法比较常见也很快捷,比如 Set-Cookie 中包含 PHPSSIONID 说明是php、包含 JSESSIONID 说明是java、包含 ASP.NET_SessionId 说明是aspx等。

指纹识别工具

在研究指纹识别技术的时候,不可避免的分析了大量指纹识别工具,在此将自己用过的几个感觉不错的工具和平台介绍一下。

国外指纹识别工具

WhatWeb(推荐指数★★★★★)

下载地址: https://github.com/urbanadventurer/WhatWeb

Whatweb 是一个开源的网站指纹识别软件,拥有超过1700+个插件,它能识别的指纹包括 cms 类型、博客平台、网站流量分析软件、javascript 库、网站服务器,还可以识别版本号、邮箱地址、账户 id、web 框架模块等。

Whatweb 是基于 ruby 语言开发,因此可以安装在具备 ruby 环境的系统中,目前支持 Windows/Mac OSX/Linux。

在debian/ubuntu系统下可直接`apt-get install whatweb`,kali已自带。

使用非常简单whatweb http://www.tidesec.net 即可,也可以加参数-v显示更详细的信息。

Wapplyzer(推荐指数★★★★)

下载地址: https://github.com/AliasIO/Wappalyzer

Wappalyzer 是一个实用的跨平台网站分析工具,用于帮助开发者、研究者和设计者检测网页使用的是什么技术,以更好地衡量自己的项目中该使用什么技术。Wappalyzer 的功能和 BuiltWith 类似,可检测内容管理系统(CMS),电子商务平台、Web服务器、JavaScript框架和已安装的分析工具等。

Wappalyzer可直接在chrome或火狐的应用商城直接搜索安装。Wappalyzer目前可识别65个大类的1216个应用,查看可检测的应用程序列表: https://wappalyzer.com/applications

Whatruns(推荐指数★★★★)

Whatruns是为chrome开发的一款web指纹识别程序,还可以显示托管的CDN、wordpress插件、wordpress字体等,拥有丰富的插件支持。

跟Wappalyzer安装类似,Whatruns可直接在chrome应用商城直接搜索安装。

安装完成后,通过插件图标来获取服务的详细运行信息,效果如下。有时候信息会比Wapplyzer还详细一些,但有时候获取速度稍慢。

Plecost(推荐指数★★★)

下载地址: https://github.com/iniqua/plecost

Plecost是Wordpress博客引擎的漏洞指纹识别和漏洞查找器,能识别Wordpress版本并能查找到cve,不过访问不了google的话可能有些功能就受限了。Plecost基于python架构,利用了Beautiful Soup来解析html、xml文件识别网站使用的插件及版本。

使用也比较方便 plecost -i /usr/share/plecost/wp_plugin_list.txt http://www.freebuf.com

BlindElephant(推荐指数★★)

下载地址: https://github.com/lokifer/BlindElephant

BlindElephant是一款Web应用程序指纹识别工具。该工具可以读取目标网站的特定静态文件,计算其对应的哈希值,然后和预先计算出的哈希值做对比,从而判断目标网站的类型和版本号。目前,该工具支持15种常见的Web应用程序的几百个版本。同时,它还提供WordPress和Joomla的各种插件。该工具还允许用户自己扩展,添加更多的版本支持。

不过该软件最新更新是在2013年,插件库应该算比较旧的了。

下载及安装可参考 https://github.com/lokifer/BlindElephant ,kali中已经内置。

使用命令: BlindElephant.py http://www.freebuf.com wordpress

国内指纹识别工具

御剑web指纹识别程序

下载地址: https://www.webshell.cc/4697.html

御剑web指纹识别程序是御剑大神开发的一款CMS指纹识别小工具,该程序由.NET 2.0框架开发,配置灵活、支持自定义关键字和正则匹配两种模式、使用起来简洁、体验良好。在指纹命中方面表现不错、识别速度很快、但目前比较明显的缺陷是指纹的配置库偏少。

windows下图形界面,比较亲民,扫描速度略慢,指纹库略少,可手工更新。

Test404轻量WEB指纹识别

下载地址: https://www.test404.com/post-1618.html

Test404轻量WEB指纹识别程序是一款CMS指纹识别小工具,配置灵活、支持自行添加字典、使用起来简洁、体验良好。在指纹命中方面表现不错、识别速度很快。可手动更新指纹识别库,而且该软件在2019.04月刚刚更新了一版。

w11scan分布式WEB指纹识别平台

w11scan是一款分布式的WEB指纹识别系统(包括CMS识别、js框架、组件容器、代码语言、WAF等等),管理员可以在WEB端新增/修改指纹,建立批量的扫描任务,并且支持多种搜索语法。

安装和下载可参考: https://github.com/w-digital-scanner/w11scan

手工安装稍微复杂,不过作者提供了docker部署,方便很多,使用了Mongodb,内置了1800多条常见的指纹,可以识别多达538种常见CMS,当然也可以手工添加指纹。

Dayu指纹识别工具

下载地址: https://github.com/Ms0x0/Dayu

“大禹”为一款c/s结构jar文件工具,只需本地安装java环境,加参数-u即可,具体设置参数可参考github介绍。

WebEye

下载地址: https://github.com/zerokeeper/WebEye/

WebEye可快速简单地识别WEB服务器类型、CMS类型、WAF类型、WHOIS信息、以及语言框架,使用异步实现指纹的快速识别。

识别速度比较快,不过指纹库不是很多,指纹库不是基于md5之类的,而是类似于fofa通过http头信息、关键字等进行快速识别。

作者对指纹进行了分类,如摄像头、waf、cdn、网络设备等,很多指纹都是精心搜集的。

WTF_Scan

下载地址: https://github.com/dyboy2017/WTF_Scan

WTF团队出品的指纹识别平台,包括的功能也相对比较多,除了指纹识别外,还有DNS解析、子域名、CDN、端口扫描、敏感目录等。

不过就单独说指纹规则来说,不算很多,可以自己添加完善,在 WTF_Scan/wtf/app/api/cms/cms.txt 文件中进行指纹修改。

Webfinger

基于fofa的规则库进行快速检索,大约2000+条指纹数据,位于lib/web.db可自行添加修改。

下载地址: https://github.com/se55i0n/Webfinger

类似的还有个CMSCAN https://github.com/cuijianxiong/cmscan/

FingerPrint

好像是百度的一个MM用perl写的一款工具,调用Wappalyzer模块进行指纹识别。

下载地址: https://github.com/tanjiti/FingerPrint

在线指纹识别

云悉指纹识别

http://www.yunsee.cn/

指纹库很强大,速度也很快,我们前端还仿了下云悉的界面,免费服务,好像还能提供api接口,学习的榜样!

如果指纹能开源就好了,哈哈~~

bugscaner指纹识别

http://whatweb.bugscaner.com/look/

目前好像指纹比较少,很多都识别不出来了。

whatweb.net

https://whatweb.net/

之前功能还不错,现在好像只能查看到header信息了。

TideFinger

上面介绍了那么多超级工具,都不好意思写自己做的小破烂东西了…大佬们可以关掉本页面了…

通过对各种识别对象、识别方法、识别工具的分析,发现大家的指纹库各式各样,识别方式也是各有千秋,传统的md5、url路径的方式居多,识别header信息的也是不少,但没有一个能集众家之长的小工具。

于是我们就做了一个小工具TideFinger

https://github.com/TideSec/TideFinger

指纹库整理

我们搜集了上面所有的指纹软件,从中提取了指纹库,进行了统一的格式化处理并进行去重,最终得到了一个大约2078条的传统指纹库。本来想把fofa的库也合并进来,发现格式差异有些大,便保持了fofa指纹库,并把WebEye的部分指纹和fofa指纹进行了合并。这样就保留了两个指纹库,其中cms指纹库为传统的md5、url库,大约2078条指纹,可通过关键字、md5、正则进行匹配,fofa库为2119指纹,主要对Header、url信息进行匹配。

指纹库优化

在对指纹库整理去重后,对每个指纹进行了命中率的标识,当匹配到某个指纹时该指纹命中率会加1,而在使用指纹时会从优先使用命中率高的指纹。

然后我们从互联网中爬取了10W个域名进行了命中率测试,然后对一些误报率比较高的指纹进行了重新优化,得到了一份相对更高效的指纹库。

未知指纹发现

目前新指纹的识别基本还是靠人工发现然后分析规则再进行添加,所以各平台都有提交指纹的功能,但是我们没有这种资源,只能另想办法。

于是想到了一个比较笨的方法:从网站中爬取一些静态文件,如png、ico、jpg、css、js等,提取url地址、文件名、计算md5写入数据库,这样再爬下一个网站,一旦发现有相同的md5,就把新的url也加入到那条记录中,并把hint值加1,这样爬取10W个站点后,就能得到一个比较客观的不同网站使用相同md5文件的数据了。

获取链接代码部分

excludeext = ['.png', '.ico', '.gif','.svg', '.jpeg','js','css','xml','txt']

def getPageLinks(url):

    try:
        headers = requests_headers()

        content = requests.get(url, timeout=5, headers=headers, verify=False).text.encode('utf-8')
        links = []
        tags = ['a', 'A', 'link', 'script', 'area', 'iframe', 'form']  # img
        tos = ['href', 'src', 'action']
        if url[-1:] == '/':
            url = url[:-1]
        try:
            for tag in tags:
                for to in tos:
                    link1 = re.findall(r'<%s.*?%s="(.*?)"' % (tag, to), str(content))
                    link2 = re.findall(r'<%s.*?%s=\'(.*?)\'' % (tag, to), str(content))
                    for i in link1:
                        links.append(i)

                    for i in link2:
                        if i not in links:
                            links.append(i)

        except Exception, e:
            print e
            print '[!] Get link error'
            pass
        return links
    except:
        return []

有兴趣的可以查看具体代码 https://github.com/TideSec/TideFinger/blob/master/count_file_md5.py 文件。

爬取的结果如下:

当然了,里面肯定很多都属于误报,比如上图中第一个其实是个500错误页面,所以出现的比较多,第二个是政府网站最下边那个常见的“纠错”的js,所以用的也比较多…

经过一些分析整理也发现了一些小众的CMS和建站系统的指纹,比如三一网络建站系统的 newsxx.php ,比如大汉JCM的 jhelper_tool_style.css 等等,后续会持续把这些新的指纹丰富到指纹库中去。

指纹识别脚本

有了指纹库之后,识别脚本就相对比较简单了,已有的一些也都比较成熟了,直接使用了webfinger和whatcms的部分代码并进行了整合优化,于是就有了TideFinger。

1、功能逻辑都比较简单,先用fofa库去匹配,然后获取一定banner,如果banner中识别除了cms,则返回结果,如果未识别到cms,则会调用cms规则库进行匹配各规则。

2、脚本支持代理模式,当设置了-p参数,且 proxys_ips.txt 文件包含代理地址时,脚本会随机调用代理地址进行扫描,以避免被封ip,不过这样的话效率可能会低一些。毕竟搜集的免费代理质量还是差一些,速度会慢很多。有钱人可以找收费代理池,然后每个规则都用不同代理去请求,这样肯定不会被封!

代理地址的搜集可以使用我修改的另一个代理池 https://github.com/TideSec/Proxy_Pool ,提供了自动化的代理ip抓取+评估+存储+展示+接口调用。

3、经测试,一般网站把所有指纹跑一遍大约需要30秒时间,个别的网站响应比较慢的可能耗时更长一些,可以通过设置网站超时时间进行控制。

安装python2依赖库

pip install lxml
pip install requests
pip install bs4

说明:sqlite3库在Python 2.5.x 以上版本默认自带了该模块,如提示sqlite3出错请自行排查。

执行脚本

$ python TideFinger.py

    Usage: python TideFinger.py -u http://www.123.com [-p 1] [-m 50] [-t 5]

    -u: 待检测目标URL地址
    -p: 指定该选项为1后,说明启用代理检测,请确保代理文件名为proxys_ips.txt,每行一条代理,格式如: 124.225.223.101:80
    -m: 指纹匹配的线程数,不指定时默认为50
    -t: 网站响应超时时间,默认为5秒

指纹识别界面如下:

指纹识别平台

在有了指纹库和识别脚本之后,我们想继续完善下这个功能,于是又加入了其他一些功能,有了这个在线指纹查询平台 http://finger.tidesec.net 

开始想加的很多,但后来在速度和时间方面不得不进行了一定的取舍,于是就有了目前如下的功能。

1、网站信息:网站标题、状态码、302跳转信息等;

2、IP地址信息:IP归属地、IP服务商信息、GPS信息;

3、CDN识别:对目标是否使用CDN进行检测,但目前CDN识别指纹还不多,对部分识别出使用CDN的目标还会列出来CNAME;

4、中间件识别:主要通过http头信息中的XPB、server等字段获取中间件信息,如nginx、iis、tomcat等;

5、更多banner:主要是调用了whatweb和Wapplyzer进行更多banner信息的获取,如jquery、bootstrap等;

6、操作系统识别:识别比较简单,通过ttl值和文件大小写是否敏感…用nmap去识别的话速度太慢…

7、本来还加入了子域名发现、端口扫描和waf探测等等,但发现耗时相对较长,而且比较容易被封IP,所以又去掉了。

团队没有专门做前端的,看云悉界面比较美观,所以就参考了云悉和WTF_Scan的界面布局,大佬不要打我们…使用了TP5框架,因为平台的功能都比较low,以防被喷就不放源码了。

大家可以试用下,给我们提提意见 http://finger.tidesec.net

注册需要验证码,关注下我们公众号回复“潮汐指纹”即可被逼拉流量O(∩_∩)O哈哈

待解决的问题

1、指纹库的继续完善:这是个旷日持久的工作,希望能坚持下去,我们也会持续的开源最新指纹库,希望大家手头有好的资源也可以贡献出来。

2、代理问题:虽然集成了代理功能,但经实际使用来看,搜集的免费代理质量还是差一些,速度会慢很多。

3、IP会被封:有的网站防护对目录枚举或一些路径非常敏感,会封IP地址;

4、下一步尝试对http头进行语义分析,从海量网站中提取分析header的共性,更高效的发现未知指纹;

5、因为穷,所以目前还是单节点进行指纹的识别,如果是第三步进入常规目录检测的方式的话可能速度会比较慢。

参考资料

在指纹库搜集和脚本开发过程中,查阅了大量资料,下面列举的可能不全,在此一并感谢这些无私奉献的安全研究者。

https://www.freebuf.com/articles/2555.html

https://blog.51cto.com/simeon/2115190

https://www.freebuf.com/news/137497.html

https://www.freebuf.com/articles/web/129939.html

https://www.freebuf.com/sectool/135216.html

https://www.test404.com/post-1299.html?wafcloud=1

https://github.com/se55i0n/Webfinger

https://github.com/tanjiti/FingerPrint

https://github.com/dyboy2017/WTF_Scan

https://github.com/zerokeeper/WebEye/

https://github.com/Ms0x0/Dayu

https://github.com/w-digital-scanner/w11scan

https://www.webshell.cc/4697.html

https://github.com/lokifer/BlindElephant

https://github.com/iniqua/plecost

https://github.com/AliasIO/Wappalyzer

https://github.com/urbanadventurer/WhatWeb

小福利

1、指纹检测工具下载

我们把上面的13款 指纹识别工具 和搜集到的一些 论文资料 进行了汇总打包,大家可以直接下载。

下载地址:https://pan.baidu.com/s/190K34cwjAWDUMLtR8EWvNA 提取码:5y4o 解压密码www.tidesec.net

后续如有更新,会在我们公众号 TideSec安全团队 上提供下载,回复“指纹工具”即可获取最新指纹识别工具下载地址。

2、指纹库下载

我们在GitHub上提供的是2019年4月的指纹库(还未进行大量的命中率测试),后续我们还会优化调整命中策略、未知指纹识别方法,持续更新优化指纹库。

https://www.tuicool.com/articles/iQBnAvv

https://www.freebuf.com/articles/web/202560.html?utm_source=tuicool&utm_medium=referral

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web指纹识别技术研究与优化实现(CMS) 的相关文章

  • 如何通过 HTML 输入标签获取文件的引用? (角度2)

    我想在 Firebase 中上传图片 但要做到这一点 我必须先获取文件 例如 如何通过 HTML 获取我的计算机的图像 我正在尝试这样做 但我不知道这样做的回报是什么 帮帮我吧伙计们
  • 表单标签的 CSS 样式

    据我所知 一个
  • REST API 与 Web API

    我是构建 HTTP API 的初学者 我似乎对 REST API 和 Web API 之间的区别感到困惑 我在网上读到更多相关内容 困惑似乎越来越多 我猜菲尔丁有与此链接相同的问题http roy gbiv com untangled 20
  • 如何判断是哪个控件导致ViewState加载失败?

    我的页面面临 Viewstate 加载问题 页面有一个登录工具来登录管理员和非管理员用户 当非管理员用户登录页面并单击启用了自动回发的复选框时 会出现奇怪的行为 错误详情如下 后来我发现 在左侧的导航面板中 承载链接 侧边栏如下图所示 Se
  • 没有样式表的 Z-Index

    您可以在不编写或嵌入样式表的情况下为 HTML 中的图像设置 Z Index 吗 我正在将一些内容上传到网络论坛 并且需要能够将一些文本放在图像顶部 并在表格内进行格式化 但图像只是被推到一边 没有办法 发送回 我一直在对 HTML 本身进
  • Ant Design Collapse - 关闭按钮

    我是 Ant Design 的初学者 在使用 Ant Design 库中的 Collapse 和 Form 时遇到了这个问题 我已经设置了我的页面 其中添加新项目的表单位于折叠中 并且折叠下方有一个项目列表
  • 通过站点到站点 VPN 将 Azure 网站连接到本地数据库

    我的目标是运行一个天蓝色的网站 该网站可以访问我们本地公司数据库中的数据 我按照网络上的教程设置了一个 Azure 虚拟网络 并通过站点到站点 VPN 将其连接到我们本地公司网络 在天蓝色门户中 我可以看到连接实际上正在工作 并且数据已被接
  • 最长和最短的 HTML 字符实体名称是什么? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 管子周围有
  • IIS 6 网站根目录与应用程序?解决Url()?

    IIS 6 ASP NET 3 5 C NET 我们遇到一个问题 即同一组文件的行为会有所不同 具体取决于它是根 IIS 网站还是 IIS 网站下的应用程序 使用生成的网址解析网址 http msdn microsoft com en us
  • 如何将 html 输入到 Flask 中?

    我有这个 html 位
  • 使用 hg 存储库作为网站

    这与我的安全问题有些相关here https stackoverflow com questions 2361626 security deny access to hg via mod rewrite 对实时网站使用 hg Mercuri
  • 使用 REST API 进行正确的会话管理

    我已经完成了 RESTful API 的设计 其中我使用作为参数发送的 API 令牌对每个请求进行身份验证 现在我想创建一个客户端界面 我想知道什么是管理每个客户端的会话的正确安全方法browser客户 我想过一个流程来保持服务器端无状态
  • 创建默认应用程序时 FirebaseOptions 不能为 null

    我正在尝试在 Flutter 集成电子邮件和基于 google 的登录中尝试一个示例项目 并计划使用 firebase 初始化来执行此操作 同时我已按照教程中提到的所有步骤进行操作 一旦尝试使用 firebase 我就会收到此错误已初始化
  • Jekyll 在子网站上生成静态网站?

    是否可以将 Jekyll 放在 GitHub 上托管的网站的单个部分上 即是否可以让 example github io 成为常规站点 而 example github io blog 由 Jekyll 静态生成 我相信可以通过创建另一个名
  • 单击链接时启动本地应用程序

    我正在开发一个内部 Web 应用程序 它允许我为客户存储远程控制凭据 每次我想要连接到客户计算机时 我都需要启动远程支持软件 复制并粘贴用户名和密码 然后单击 开始 按钮 该软件将具有可用的命令行参数 允许我立即启动会话 但是 我不知道如何
  • Phonegap - cordova 在 Android 和 iOS 设备上延迟且缓慢

    我刚刚开始使用 zend studio 开始我的第一个 PhoneGap 项目 但是 在我构建并部署它之后 该应用程序非常慢 Android 和 iOS 均可 滚动滞后 如果我按下按钮 转到下一页的速度很慢 有什么办法可以提高它的性能吗 提
  • Magento:设置刚刚创建的网站的配置值?

    我正在以编程方式创建网站 用户等 问题是 创建网站时 我无法立即设置配置值 Code
  • Firebase Auth - 最近登录多长时间

    我有一个个人资料选项卡 用户可以在其中按编辑并编辑他们的个人资料 我只想在必要时才需要他们的密码 所以想知道用户登录的时间是多少毫秒 这使得它不是最近登录 其中firebase会抛出错误 auth requires recent login
  • 在 Blogger 中使用相对链接

    我正在使用博主 当我需要在我的博客文章中提到一个链接并且该链接实际上是我自己的博客文章的链接时 我在其旁边提到标签 www my blog name blogspot in 12 2013 how to do html if i chang
  • 如何防止桌面浏览器(Chrome、Safari)缩放网页

    我尝试使用以下元视图端口标记来防止浏览器缩放 但这不起作用 我知道这是可能的 因为我的缩放在此网站上被阻止 未来主义 xyz http futurism xyz 该网站的视口标签是这样的

随机推荐

  • CPU如何知道当前运行的是操作系统还是一般应用软件

    CPU如何知道当前运行的是操作系统还是一般应用软件 有赖于处理器状态的标识
  • python_if练习2:猜拳游戏

    题目要求 1 从控制台输入你要出的拳 石头 1 剪刀 2 布 3 2 电脑随即出拳 3 比较胜负 脚本内容 import random 1 从控制台输入要出的拳 player int input 请输入您要出的拳 石头1 剪刀2 布3 2
  • 使用nwjs-builder-phoenix构建跨平台桌面应用程序

    原文地址 使用nwjs builder phoenix构建跨平台桌面应用程序 BIGTREE whwtree com NW js应用自动打包的两种方式 nwjs builder phoenix 推荐 nw builder 本文主要讲述使用n
  • Centos7.9安装k8s图文详解

    Kubernetes用两种部署方式 1 kubeadm Kubeadm是一个k8s部署工具 提供kubeadm inint和 kubeadm join 用于快速部署Kubenetes集群 2 二进制部署 从github下载二进制包 手动部署
  • 服务器硬盘指示灯的显示说明

    硬盘驱动器活动指示灯 绿色 硬盘驱动器状态指示灯 绿色和琥珀色 下表针对配置了RAID 阵列的HD 指示灯不同显示对应的状态说明 驱动器状态指示灯显示方式 仅适用于 RAID 状态 每秒呈绿色闪烁两次 正在识别驱动器或准备卸下 不亮 准备插
  • 【spring mvc】Spring MVC拦截器+注解方式实现防止表单重复提交

    方法很多 先转载下 后面一个个实验 获得最优方案 原理 在新建页面中Session保存token随机码 当保存时验证 通过后删除 当再次点击保存时由于服务器端的Session中已经不存在了 所有无法验证通过 1 新建注解 java view
  • 贪心算法解决最小集合覆盖问题

    AVL自平衡树 关键就是对于递归的每一步插入都要进行判断 而不是对于root节点进行判断 ac代码 include
  • Web 前端开发技术 ——html

    Web 前端开发技术 html 文章目录 Web 前端开发技术 html 一 html 文件结构 二 文本 三 图片 四 音频和视频 五 超链接 六 表单 七 列表 八 表格 九 语义标签 一 html 文件结构 html的所有标签为树型结
  • Mybatis-Plus代码自动生成器

    代码自动生成器 public class EasyCode public static void main String args 需要构建一个 代码自动生成器 对象 AutoGenerator mpg new AutoGenerator
  • Qt程序的发布

    QT相关技术问题 一 QT程序的发布 1 在程序中运行debug或者release 占用较少的内存 之后 复制release中的exe文件 放在新的文件夹中 比如 我的第一个QtAPP发布 2 部署环境设置 部署依赖 找到安装目录下的win
  • Lattice学习总结中……

    1 Lattice官网 http www latticesemi com 2 需要注册一下 sign in 按要求填写一下 3 注册完之后 在官网的首页 Products 下载Lattice的设计环境 ispLEVER classic 4
  • C++ STL --哈希表

    目录 1 unordered系列关联式容器 1 1 unordered map 1 1 1 unordered map的文档介绍 1 1 2 unordered map的接口说明 1 2 unordered set 1 3 在线OJ 2 底
  • java grid动态行合并,CSS Grid布局:合并单元格布局

    CSS Grid布局 网格单元格布局 一文中通过一些简单的实例介绍了如何给容器定义网格 并且怎么使用网格线或者网格区域来实现单元格这样的简单的布局 在文章结尾之处也提到过 这样的单元格如同表格一样 仅仅一个个独立的单元格是无法满足一些复杂的
  • nestjs 优秀的ORM框架sequelize操作数据库

    奉上最新代码 nestjs服务demo代码 gitee地址 github地址 nodejs的ORM sequelize 笔者在使用koa2开发后端服务的时候用的ORM框架是sequelize 觉得挺好用的 也做了分享 node从入门到放弃系
  • 安卓psp模拟器哪个好_更完美!安卓PSP模拟器PPSSPP 0.9.9发布

    PConline 资讯 最好的安卓PSP模拟器PPSSPP 0 9 9新版发布下载了 PPSSPP是最强的PSP模拟器 在PC 安卓和iOS上均有对应版本 笔者曾经简单介绍过PPSSPP安卓版的用法 详情可以点此查看PPSSPP教程 现在
  • HiveSQL:求累计访问量

    数据 userId visitDate visitCount u01 2017 1 21 5 u02 2017 1 23 6 u03 2017 1 22 8 u04 2017 1 20 3 u01 2017 1 23 6 u01 2017
  • 10个常见的Redis面试"刁难"问题

    导读 在程序员面试过程中Redis相关的知识是常被问到的话题 作为一名在互联网技术行业打击过成百上千名的资深技术面试官 本文作者总结了面试过程中经常问到的问题 十分值得一读 作者简介 钱文品 老钱 互联网分布式高并发技术十年老兵 目前任掌阅
  • docker搭建测试(项目)管理平台jira

    1 下载镜像 使用docker下载jira和mysql的镜像 docker pull cptactionhank atlassian jira software docker pull mysql 5 6 docker images 查看是
  • Font shape `OMX/cmex/m/n‘ in size <10.53937> not available (Font) size <10.95> substituted.

    Latex在写公式时 报如下错误 Font shape OMX cmex m n in size lt 10 53937 gt not available Font size lt 10 95 gt substituted 解决方案 在 b
  • Web指纹识别技术研究与优化实现(CMS)

    本文通过分析web指纹的检测对象 检测方法 检测原理及常用工具 设计了一个简易的指纹搜集脚本来协助发现新指纹 并提取了多个开源指纹识别工具的规则库并进行了规则重组 开发了一个简单快捷的指纹识别小工具TideFinger 并实现了一套在线的指