机器学习学习笔记--SVM识别XSS
XSS是什么?
XSS又称CSS,全称Cross
SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。
这里可以用SVM的SVC分类方法识别XSS攻击
代码:
#coding: utf-8
import re
import numpy as np
from sklearn import cross_validation
from sklearn import datasets
from sklearn import svm
from sklearn.externals import joblib
from sklearn.metrics import classification_report
from sklearn import metrics
x = []
y = []
def get_len(url):
return len(url)
def get_url_count(url):
if re.search('(http://)|(https://)',url,re.IGNORECASE):
return 1
else:
return 0
#web日志特征化 url 的长度 url中包含的第三方域名的个数
def get_evil_char(url):
return len(re.findall("[<>,\'\"/]",url,re.IGNORECASE))
def get_evil_word(url):
return len(re.findall("(alert)|(scripts=)(%3c)|(%3e)|(%20)|(onerror)|(onload)|(eval)|(src=)|(prompt)",url,re.IGNORECASE))
#敏感字符的个数 敏感关键字的个数
def do_metrics(y_test,y_pred):
print "metrics.accuracy_score:"
print metrics.accuracy_score(y_test,y_pred)
print "metrics.confusion_matrix:"
print metrics.confusion_matrix(y_test,y_pred)
print "metrics.precision_score:"
print metrics.precision_score(y_test,y_pred)
print "metrics.recall_score:"
print metrics.recall_score(y_test,y_pred)
print "metrics.f1_score:"
print metrics.f1_score(y_test,y_pred)
def etl(filename,data,isxss):
with open(filename) as f:
for line in f:
f1 = get_len(line)
f2 = get_url_count(line)
f3 = get_evil_char(line)
f4 = get_evil_word(line)
data.append([f1,f2,f3,f4])
if isxss:
y.append(1)
else:
y.append(0)
etl('/home/qin/code/python/web-ml/1book-master/data/xss-200000.txt',x,1)
etl('/home/qin/code/python/web-ml/1book-master/data/good-xss-200000.txt',x,0)
#以上 导入数据并且完成特征化数据 而且完成xss打标为1 正常为0
#数据的拆分 通常测试数据是40% 而训练数据为60%
x_train,x_test,y_train,y_test = cross_validation.train_test_split(x,y,test_size=0.4,random_state=0)
clf = svm.SVC(kernel='linear',C=1).fit(x_train,y_train)
#SVM的分类模型被称为SVC 内核采用‘linear’
y_pred = clf.predict(x_test)
print y_train
print y_pred
print y_test
do_metrics(y_test,y_pred)
效果图
这里输出了y_train和y_predict两个矩阵 数据有20w
这里是得到的准确度有0.99之高