快速排除网站CMS系统中可疑URL地址的实现

2020-06-19 04:09玉易邓学彦
视听 2020年6期
关键词:编程语言列表字典

□ 玉易 邓学彦

一、引言

随着互联网技术的不断发展和广泛应用,网络安全问题也变得越来越严重。在日常的网站维护和安全管理中,网站版本每次上线或例行代码变更时,网站运维人员都必须对网站数据进行排查,但网站CMS系统中网页数据量巨大,无法人工一一查看。为提高网站运维人员的工作效率,我们利用Python语言中正则表达式和去重算法编写程序,对网站CMS系统引用的URL地址进行快速统计,查找可疑地址,排除了风险隐患。

Python是一种高级编程语言,采用解释运行的方式,编写后无需编译即可直接通过解释器执行,编程效率极高,在各编程语言中位居前列。正则表达式是内嵌在Python中的编程语言,通过re模块实现,基本功能是匹配、替换和提取。构造正则表达式,是通过将元字符与普通字符按各种方式结合在一起,用事先定义好的规则来匹配或捕获那些符合某个模式的文本。正则表达式的形式为/匹配模式/,其中位于定界符之间的部分就是将要在目标对象中进行匹配的模式①。

二、去重算法简介

利用正则表达式匹配出网站CMS系统引用的URL地址列表数据是包含重复信息的,因此需要对其进行去重处理。实现去重的算法常见有如下几种。

(一)利用字典的fromkeys()和keys()方法②

Python中的字典数字类型是可变容器模型,能存储任意类型对象。字典的每个键值对用冒号分割,每个对之间用逗号分割,整个字典包括在花括号中。字典的键必须是唯一的,但字典的值不必是唯一,可以取任何数据类型。字典格式为:Dict1={key1 :value1,key2 :value2}。

1.Python字典fromkeys()函数用于创建一个新字典,语法为 dict.fromkeys(seq[,value]),其中,seq 为字典键值列表,value为可选参数。用fromkeys()方法去重可得到一个字典实例,去重之后创建了一个以源列表元素为键,值为 None的新字典(Dict):

unique_urls=[]

unique_urls.extend({}.fromkeys(total_urls).keys())

2.Python字典keys()函数以列表返回一个字典所有的键,语法为dict.keys(),dict.keys()函数返回的是一个字典所有的键。利用该方法去重能重新创建一个新列表实例,得到去除重复数据后的列表。

(二)利用set集合进行去重

在Python中集合有去重的功能,即把一个有重复元素的列表或元组等数据类型转变成集合时,其中的重复元素只出现一次,使用set()方法③。举例如下:使total_urls,unique_urls分别为含有重复元素的列表和元组,使用set()方法后可转变成不含重复元素的集合类型。

unique_urls=set(total_urls)

unique_urls=list(unique_urls)

(三)利用for循环和in条件判断去重

在python中,可使用关键字in来判断特定的值是否存在列表中,使用关键字not in来判断特定的值不存在列表中。此外,for循环和关键字in还可遍历整个list列表,逐一判断其中元素的唯一性。

经过速度对比测试,我们选用keys()方法来进行去重。

三、实现

(一)实现步骤

第一步:创建本地文件夹,用于存放数据库备份文件和导出文件;

第二步:加载数据库导出SQL文件;

e.compile(r'https?://(?:[-w.]|(?:%[da-fA-F]{2}))+');

第三步:统计数据库内所有URL出处;

第四步:list列表到dict字典之间互相转换,利用字典key的唯一性去掉了重复的URL地址,将结果保存至桌面;

第五步:查找可疑的URL地址,越不规则的URL越可疑。

(二)程序设计(如下图)

四、结语

本文通过使用Python编写程序对网站CMS系统引用的URL进行快速安全排查,利用了正则表达式快速准确的匹配、替换和提取等功能以及去重算法,在实际使用中显著提高了网站运维人员日常巡检的工作质量和效率,有力保障了网站的安全。

注释:

①张静,张妍.正则表达式及其在信息抽取中的应用[J].电脑知识与技术,2009(15):3867-3868.

②花田半亩2091.Python列表的去重方式[EB/OL].博客园,2020-04-02.https://www.cnblogs.com/longyuu/p/10033820.html.

③Allen-Liu.Python中的集合类型及其操作[EB/OL]CSDN,2017 -07 -27.https://blog.csdn.net/bbc955625132551/article/details/76169197.

猜你喜欢
编程语言列表字典
基于JavaScript编程语言之 闭包技术在焦点轮播上的应用
学习运用列表法
扩列吧
Java编程语言的特点与应用
字典的由来
浅谈不同编程语言对计算机软件开发的影响
大头熊的字典
正版字典
面向对象Web开发编程语言的的评估方法
列表画树状图各有所长