随着网络/信息安全攻防的不断升级,传统的安全检测方法已经不能够满足新的安全威胁,大数据以及机器学习的方法越来越多的被应用到安全领域,本文研究了一种将贝叶斯算法应用到恶意内容识别的方法,不属于新方法,仅做实践验证.
首先确定识别的恶意内容为-色情类,方法最终可推广到博彩类,钓鱼网站类等等.为了提取色情类网站内容通用关键词,需要编写网站爬虫工具,爬取敏感关键字.为了对付动态网页内容以及js代码,这里需要借助PyQt QtWebKit模块的力量.使用该模块获取到网页内容后需要使用正则的方式过滤掉html便签等内容,正则如下:
'//]*//\]\]>'
'<\s*script[^>]*>[^<]*<\s*/\s*script\s*>'
'<\s*style[^>]*>[^<]*<\s*/\s*style\s*>'
'
'
'?\w+[^>]*>'
''
过滤后的内容为待提取的字符串.此处需要应用到英文单词分词的内容,需要去掉冠词如 a the 等单词,避免在提取到的敏感词中包含该类单词.并且需要将英文单词的ing 形式,ed等形式做转换,以便将同一个单词的不同形式合并为一个单词后计数.使用python的nltk库可以轻松搞定上述事情.样例代码如下:
sr = stopwords.words('english')
for token in tokens:
if token.strip() not in sr:
token = porter.stem(token)
freq = nltk.FreqDist(clean_tokens)
standard_freq_vector = freq.most_common(50) #取出统计次数为前50的单词
以上便取出了网站中的高频词汇,通过对大量色情类网站高频词的提取后可以综合整理出一份通用的该类网站的高频词汇,部分词汇如下:porn sex free video var fuck hot big teen girl xxx tube ass pussi asian matur cock young sexi movi milf horni
正常词汇样例如下(正常词汇本例使用的为英文中高频词汇):twist happen probabl loud detail book futur sick varieti wing repeat stay veil humbl appoint scientif rule pupil
将色情类以及正常词汇样例结合组成词汇向量a.
准备训练样本,方法如下:对于一个色情类url,使用上述方法提取出高频词汇,然后于向量a中词汇对比,存在记为1,不存在记为0,最终形成该url的训练样本向量x.
朴素贝叶斯算法的应用已经相当普遍,sklearn中已经包含该模块.训练代码如下:
from sklearn.naive_bayes import GaussianNB
train_x,train_y,test_x,test_y = get_train_data()
X = np.array(train_x)
Y = np.array(train_y)
clf = GaussianNB()
clf.fit(X, Y)
test_ret = clf.predict(test_x)
经过测试,训练后模型对色情类网站内容的识别率在测试集上可达99.99%.该方法同时可应用去其他类敏感信息的识别.