机器学习学习笔记--SVM识别XSS

2017-11-27  本文已影响0人  松爱家的小秦

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之高

上一篇下一篇

猜你喜欢

热点阅读