□ 玉易 鄧學彥
隨著互聯網技術的不斷發(fā)展和廣泛應用,網絡安全問題也變得越來越嚴重。在日常的網站維護和安全管理中,網站版本每次上線或例行代碼變更時,網站運維人員都必須對網站數據進行排查,但網站CMS系統(tǒng)中網頁數據量巨大,無法人工一一查看。為提高網站運維人員的工作效率,我們利用Python語言中正則表達式和去重算法編寫程序,對網站CMS系統(tǒng)引用的URL地址進行快速統(tǒng)計,查找可疑地址,排除了風險隱患。
Python是一種高級編程語言,采用解釋運行的方式,編寫后無需編譯即可直接通過解釋器執(zhí)行,編程效率極高,在各編程語言中位居前列。正則表達式是內嵌在Python中的編程語言,通過re模塊實現,基本功能是匹配、替換和提取。構造正則表達式,是通過將元字符與普通字符按各種方式結合在一起,用事先定義好的規(guī)則來匹配或捕獲那些符合某個模式的文本。正則表達式的形式為/匹配模式/,其中位于定界符之間的部分就是將要在目標對象中進行匹配的模式①。
利用正則表達式匹配出網站CMS系統(tǒng)引用的URL地址列表數據是包含重復信息的,因此需要對其進行去重處理。實現去重的算法常見有如下幾種。
Python中的字典數字類型是可變容器模型,能存儲任意類型對象。字典的每個鍵值對用冒號分割,每個對之間用逗號分割,整個字典包括在花括號中。字典的鍵必須是唯一的,但字典的值不必是唯一,可以取任何數據類型。字典格式為:Dict1={key1 :value1,key2 :value2}。
1.Python字典fromkeys()函數用于創(chuàng)建一個新字典,語法為 dict.fromkeys(seq[,value]),其中,seq 為字典鍵值列表,value為可選參數。用fromkeys()方法去重可得到一個字典實例,去重之后創(chuàng)建了一個以源列表元素為鍵,值為 None的新字典(Dict):
unique_urls=[]
unique_urls.extend({}.fromkeys(total_urls).keys())
2.Python字典keys()函數以列表返回一個字典所有的鍵,語法為dict.keys(),dict.keys()函數返回的是一個字典所有的鍵。利用該方法去重能重新創(chuàng)建一個新列表實例,得到去除重復數據后的列表。
在Python中集合有去重的功能,即把一個有重復元素的列表或元組等數據類型轉變成集合時,其中的重復元素只出現一次,使用set()方法③。舉例如下:使total_urls,unique_urls分別為含有重復元素的列表和元組,使用set()方法后可轉變成不含重復元素的集合類型。
unique_urls=set(total_urls)
unique_urls=list(unique_urls)
在python中,可使用關鍵字in來判斷特定的值是否存在列表中,使用關鍵字not in來判斷特定的值不存在列表中。此外,for循環(huán)和關鍵字in還可遍歷整個list列表,逐一判斷其中元素的唯一性。
經過速度對比測試,我們選用keys()方法來進行去重。
第一步:創(chuàng)建本地文件夾,用于存放數據庫備份文件和導出文件;
第二步:加載數據庫導出SQL文件;
e.compile(r'https?://(?:[-w.]|(?:%[da-fA-F]{2}))+');
第三步:統(tǒng)計數據庫內所有URL出處;
第四步:list列表到dict字典之間互相轉換,利用字典key的唯一性去掉了重復的URL地址,將結果保存至桌面;
第五步:查找可疑的URL地址,越不規(guī)則的URL越可疑。
本文通過使用Python編寫程序對網站CMS系統(tǒng)引用的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.