如何使用深度学习检测XSS

在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
标签:至少1个,最多5个
学习机器学习已经有段时间了,心里一直在寻思着如何将其运用在安全上,前几天刚好看到兜哥的那篇文章,于是花了两天时间实现了一个简单的基于svm的xss过滤器,这里做一个比较接地气的分享。
1.概念理解
首先还是科普一些基础概念,什么是SVM,SVM叫支持向量机,是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力。简单来说,就是一个机器学习算法,有什么用呢?我可以通过一些xss语句样本总结规律,从而分辨正常语句和攻击语句,有点类似人的学习行为。
说一下分类原理,比如:
这样一幅图,攻击语句和正常语句可以使用简单y=wx+b这样的线性公式分类出来,横纵坐标就代表我们选取的维度。但如果工具语句和正常语句的特征没有那么明显的区分,混在一起呢
这样的话分割公式就会变得非常怪异,或许单条公式还无法满足需求,而这仅仅是二维上的,如果是三维的呢?
最后得到的东西可能就是这个样子,如果再加更多的维度,那就不太好想象了。这个得出这些奇怪图形的过程就叫拟合,而最终形成的样子就是我们的模型,这个模型可能由几百上千个公式构成,SVM就是这么一套帮助我们建模的算法。
2.向量化过程
对于xss,我们人能理解各个标签的含义,各种语意组合,但是机器并不能,所以接下来就是对xss的特征进行向量化,先以一个攻击语句为例:
/index.php?id="; javascript:window.open('data:text/base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg=='); "
该语句拥有xss中的很多特征,比如javascript、括号、单双引号等,当然这样仅仅三个维度还太少了,我选取了10个xss常见的关键字符作为维度
可以看到我使用了count函数,为什么要用count呢,就是为了统计一个url中这些关键词出现的个数,然后形成一个10维矩阵比如一个攻击payload:
/index.php?id=1’”&script&alert(1)&/script&
形成的矩阵结果就是
[2,0,0,2,2,1,1,0,1,1]
这个过程就叫做向量化,为什么要这样做呢?这正是因为计算机无法识别直接对如script这样的字符进行处理,我们向量化之后它识别起来就容易得多。
3.训练过程
接下来就是一个训练过程,我们需要为计算机提供两个样本,一个样本全是xss攻击语句,一个则是正常语句,并为这些样本里的url做好标记,比如我标记xss攻击样本里的url特征全部为1,正常样本里的url特征全部为0,这样让机器在训练过程中知道自己的对错。攻击样本:
正常样本:
这些url经过向量化之后可能会形成一个巨大的十维阵列恶意样本阵列 xss_list
恶意样本标签:xss_lable
正常样本阵列safe_list
正常样本标签:safe_lable
将两组样本和标签合并
x=xss_list+safe_list
y=xss_lable+safe_list
最后使用svm poly算法进行拟合
clf=svm.SVC(kernel='poly', degree=2).fit(x, y)
最终拟合得到的这个clf即我们的模型我们可以使用clf.predict(new_paylaod)来进行预测,此时的clf代表了一个经过多次变形扭曲之后的奇怪的东西。对攻击payload进行预测:
我们对这个过程进行一个分析,其实最终得到的这个模型就是根据一个url里面关键字的个数进行的统计+分析,但这个分析结果不同于正则的点在于,它可以记住一些相关性,比如
[2,1,0,0,0,0,1,0,0,2]这样矩阵被判别为了xss攻击,但
[2,1,0,0,0,0,0,0,0,2]这样的阵列却不会被判别为xss攻击
相比于传统的正则非黑即白的判断多了更多模糊组合的判别能力,而且由于其基于实战样本中提取的矩阵特征组合,其对于未知payload的识别能力也比正则好得多,归纳一下机器学习在xss识别上的好处和不好地方优势:
自动拟合形成模型,模糊判断能力强,对未知payload识别能力强
只要有足够的样本和好的维度,判断精确度可无上限提升
模型一旦形成,再调用现成模型判别速度极快
依赖样本,需要大量的提纯样本用于训练
模型一旦形成,难以修改,训练样本越大,单条样本对整体模型的影响越小,发现误报改变模型较为麻烦
这里我为了检测效果,将样本集进行了9:1的拆分,训练集9成,样本集1成,利用训练集训练完成的模型对样本集进行预测
准确率浮动在百分之九十七到九十八之间,还是算精度很高的模型了,当然可能和我的样本集也有关系,测试地址:
欢迎来搞,如果bypass请留下你的payload或直接加我交流,谢谢。
0 收藏&&|&&1
你可能感兴趣的文章
3 收藏,1.1k
2 收藏,1.2k
本作品采用 署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可
写得很详尽!想问一下你的url样本集 是怎么来的呢?手工创建的文件吗?还是爬虫啊?
写得很详尽!想问一下你的url样本集 是怎么来的呢?手工创建的文件吗?还是爬虫啊?
可以搭建网站收集正常日志,也有专门提供日志的网站可以去找
可以搭建网站收集正常日志,也有专门提供日志的网站可以去找
谢谢昂 你知道有什么专门提供日志的网站吗
谢谢昂~~ 你知道有什么专门提供日志的网站吗~~
可以去github找,挺多的
可以去github找,挺多的
写得很详尽!想问一下你的url样本集 是怎么来的呢?急求!
写得很详尽!想问一下你的url样本集 是怎么来的呢?急求!
payload可以去github寻找,普通url我之前收集过一份,具体源不太清楚了,你google找找应该挺多的
payload可以去github寻找,普通url我之前收集过一份,具体源不太清楚了,你google找找应该挺多的
/foospidy/payloads
分享到微博?
我要该,理由是:一种基于模拟浏览器行为的XSS漏洞检测方法
一种基于模拟浏览器行为的XSS漏洞动态检测方法,爬虫模块含有浏览器的内核,可以模拟浏览器行为来解析JavaScript和加载Ajax以得到页面中隐藏式注入点,相比传统而言,该系统大大增加了对注入点的覆盖。漏洞检测模块使用黑盒测试的方法,在提交攻击向量后,通过模拟浏览器行为检测页面是否有异常情况出现,即能够检测浏览器是否执行了网页脚本,直接判断出当前注入点是否有漏洞,相比传统方法更加准确。此外,该方法完全采用python语言开发,具有易于维护和进行二次开发的特点,对XSS漏洞的检测与研究有非常重要的应用价值。
专利类型:
申请(专利)号:
申请日期:
公开(公告)日:
公开(公告)号:
主分类号:
G06F21/57,G06F21/00,G,G06,G06F,G06F21
G06F21/57,G06F21/00,G06F21/56,G06F21/00,G,G06,G06F,G06F21,G06F21/57,G06F21/00,G06F21/56,G06F21/00
申请(专利权)人:
北京工业大学
发明(设计)人:
王丹,刘源,赵文兵,杜金莲,苏航
主申请人地址:
100124 北京市朝阳区平乐园100号
专利代理机构:
北京思海天达知识产权代理有限公司 11203
国别省市代码:
一种基于模拟浏览器行为的XSS漏洞检测方法,其特征在于:本方法基于Ghost.py的对服务器的黑盒测试,它由爬虫模块和漏洞检测模块两个部分组成;1.1爬虫模块爬虫模块实现探索页面功能和网页解析功能;探索页面的爬虫使用本文提出的递归的深度优先算法,仅挖掘同域名下的页面;该算法描述如算法1所示;算法1.页面探索的深度优先递归算法输入:起始网站URL输出:以输入URL为起点爬取到的所有同域名页面URL1.设置最大深度MAX_DEPTH;2.设置当前深度depth=0;3.如果当前深度大于最大深度,结束;否则,执行步骤4;4.访问当前URL;5.获取页面所有URL存入URL_List;6.如果URL_List为空,结束;否则执行步骤7;将URL_List中下一个URL作为当前URL,当前深度加1,执行步骤3;在探索页面前,还需要进行网页解析,将页面动态加载完,并触发页面中的事件以获取JavaSricpt或Ajax生成的新的URL和注入点;其中的加载页面由Ghost.py提供的API完成,网页解析主要完成三个功能,一是事件搜集,寻找网页中可能解析JavaScript和加载Ajax的点击事件并触发;二是URL搜集,将新的URL放入待访问的URL列表用于探索页面;三是注入点搜集,用于之后的漏洞检测;本方法使用Python的Beautiful Soup库来完成网页解析;Beautiful Soup是一个用Python写的HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树,并且提供简单又常用的导航,搜索以及修改剖析树的操作;(1)触发事件触发事件时,使用Beautiful Soup库搜索带有事件属性的标签,之后用Ghost.py模拟用户点击触发事件;对事件进行点击后可能使浏览器解析JavaScript和加载Ajax,产生DOM元素的改变或者URL的跳转,对此采取不同的方式应对;如果跳转到新的URL,存储当前URL并返回之前页面即可,而产生DOM元素则需再次寻找是否出现了新的事件,直至不再产生DOM元素为止,步骤如算法2描述:算法2.页面DOM元素展开算法输入:第一次请求得到的页面HTML代码输出:展开后的页面HTML代码1.获取所有含有事件的标签存入tag_list,去除重复的标签;2.模拟点击tag_list中下一个未访问过的标签;3.将该标签存入visit[],标记为访问过;4.若页面跳转,执行步骤5;否则,执行步骤6;5.将跳转后的页面URL存入URL_List,执行步骤2;如果DOM元素改变,执行步骤1;通过这种方式,可以将网页不断展开,以达到寻找隐藏式注入点的目的;(2)添加URLURL超链接一般存在于&a&标签的href属性中,对于HTML中的&a&标签,其href属性的值可以是任何有效文档的相对或绝对URL,包括片段标识符和JavaScript代码段;一般用户点击&a&标签中的内容时,浏览器除了会跳转到href属性指定的URL,也可能会执行JavaScript表达式、方法和函数的列表;传统的网络爬虫仅采用正则表达式匹配一般URL的形式,这样很可能会漏掉页面和注入点,所以本系统借助带有浏览器引擎的Ghost.py库,对href的值进行多种处理;标准化函数针对不同情况进行字符串处理,将其转换成一般URL的形式;若转换后的URL不在列表中,将存储至URL列表以用于之后的页面挖掘;1.2漏洞检测模块(1)漏洞检测本方法采用黑盒测试方法来检测目标表单是否存在XSS漏洞;漏洞检测的基本方法是使用RSnake提供的Cheat Sheet作为攻击向量来填写表单并提交;该Cheat Sheet包括多种可以绕过XSS检验的攻击向量;这些经过设计的攻击向量提交后,如果存在漏洞,则页面会执行一个弹出提醒框的脚本,其内容为XSS,此时通过Ghost.py提供的wait_for_alert()检测是否有提醒框出现,即检测网页是否执行了脚本,直接判断出当前注入点是否有漏洞;使用此方法时,如果弹出了对话框,且对话框中含有污点数据,则当前表单一定存在XSS漏洞;(2)查找表单及其注入点如果要提交某一个表单,需要标记该表单在DOM树中的位置,之后使用CSS属性选择器找到它,首先寻找HTML文档中的所有表单并存于数组,标记为form[0]、form[1],之后找到form[0]中input[0],form[1]中的input[1]、input[2],将其name属性存于二维数组中,由于name属性是提交请求时唯一需要的属性,所以其它属性不用保存;(3)自动填写并提交表单本文使用Ghost.py提供的填写表单的函数在表单栏填写XSS攻击向量:ghost.set_field_value("input[name=%s]"%name,xss)此外,Ghost.py还可以模拟JavaScript语句来提交表单:ghost.evaluate("document.querySelectorAll('form')[%d]['submit']();"%form_i),expect_loading=True)表单有可能存在限制输入长度,不允许一些非法字符等前端验证,导致攻击向量不能提交;这些验证事件存在于表单的属性中,需要模拟JavaScript语句将这些属性移除;document.querySelectorAll('input[type=submit]')[0].removeAttribute('onclick');document.querySelectorAll('input[type=submit]')[0].removeAttribute('onfocus');之后对表单操作的具体步骤如算法3描述:算法3.自动填充攻击向量提交输入:存储表单及其注入点的二维数组输出:漏洞检测结果1.遍历保存全部XSS攻击向量的xss_rsnake数组;2.对于表单中的每一个用户输入出,用当前攻击向量填充;3.提交表单;4.根据漏洞检测方法判断是否存在XSS漏洞,如果存在则执行步骤5,;否则执行步骤1;5.存储漏洞在DOM中的位置、当前页面URL及其它信息;6.结束。
法律状态:
公开 ,公开 ,公开 ,实质审查的生效 ,实质审查的生效 ,实质审查的生效
加载中,请稍候
.客服电话
&&8:00-11:30,13:00-17:00(工作日)如何使用深度学习检测XSS
时间: 02:21:34
分类 : 黑客技术
众所周知,深度学习在计算机视觉、自然语言处理、人工智能等领域取得了极大的进展,在安全领域也开始崭露头角走向了实际应用。本文中进行的实验主要以文本分类的方法,使用深度学习检测XSS攻击,由于本人是初学者,难免对算法本身的理解不够确切,所以本文尽量使用通俗简单的方式介绍算法,不会过多的讲解细节,以免误导大家。
二、数据集
安全领域的公开数据集非常的稀缺,本文提供的实验数据包含两个部分:从爬取的黑样本作为正样例,有4万多条;另外提供约20万条正常的http get请求记录作为负样例,为了保证数据安全,去除了url中的host、path等信息,仅保留了payload的部分。
以上数据url编码后保存在csv中,由于部分原始数据进行过url编码,所以要两次url解码后才能使用。
topic=http://gmwgroup.harvard.edu/techniques/index.php?topic=&alert(document.cookie)&
siteID=';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//\";alert(String.fromCharCode(88,83,83))//--&&"&'&&alert(String.fromCharCode(88,83,83))&
js='"--&&&&alert(/meehinfected/)&&&&XSS:)&&&&XSSTEST&&& &&XSS
_=7/&list=FU1804,FU0,FU1707,FU1708,FU1709,FU1710,FU1711,FU1712
hid=sgpy-windows-generic-device-id&v=8.4.0.1062&brand=1&platform=6&ifbak=0&ifmobile=0&ifauto=1&type=1&filename=sgim_privilege.zip
iid=&device_id=&ac=wifi&channel=huawei&aid=13&app_name=news_article&version_code=621&version_name=6.2.1&device_platform=android&ssmix=a&device_type=FDR-A03L&device_brand=HUAWEI&language=zh&os_api=22&os_version=5.1.1&uuid=318&openudid=fc19d05187ebeb0&manifest_version_code=621&resolution=1200*1848&dpi=240&update_version_code=6214&_rticket=6
使用文本分类的方法自然涉及到如何将文本分词。观察以上正样例,人是如何辨别XSS的:参数内包含完整可执行的HTML标签和DOM方法。所以要支持的分词原则为:
&单双引号包含的内容 ‘xss’
& http/https链接
& &&标签 &script&
& &&开头 &h1
& 参数名 topic=
& 函数体 alert(
& 字符数字组成的单词
另外,为了减小分词数量,需要把数字和超链接范化,将数字替换为”0”,超链接替换为。
实现的代码如下:
def GeneSeg(payload):
& & payload=payload.lower()
& & payload=unquote(unquote(payload))
& &payload,num=re.subn(r'\d+',"0",payload)
& &payload,num=re.subn(r'(http|https)://[a-zA-Z0-9\.@&/#!#\?]+',"http://u", payload)
& & r = '''
& & & & (?x)[\w\.]+?\(
& & & & |\)
& & & & |"\w+?"
& & & & |'\w+?'
& & & & |http://\w
& & & & |&/\w+&
& & & & |&\w+&
& & & & |&\w+
& & & & |\w+=
& & & & |&
& & & &|[\w\.]+
& & return nltk.regexp_tokenize(payload,r)
分词后的正样例:
['topic=', 'http://u', '&script&', 'alert(','document.cookie', ')', '&/script&']
['siteid=', 'alert(', 'string.fromcharcode(', '0','0', '0', ')', ')', 'alert(', 'string.fromcharcode(', '0', '0', '0', ')', ')','alert(', 'string.fromcharcode(', '0', '0', '0', ')', ')', 'alert(','string.fromcharcode(', '0', '0', '0', ')', ')', '&', '&/script&','&', '&', '&script&', 'alert(', 'string.fromcharcode(', '0', '0','0', ')', ')', '&/script&']
['js=', '&', '&/style&', '&/script&','&script&', 'alert(', 'meeh', 'infected', ')', '&/script&','&/title&', '&marquee&', '&h0&', 'xss', ')', '&/h0&','&marquee&', '&strong&', '&blink&', 'xss', 'test','&/blink&', '&/strong&', '&/marquee&', '&h0', '&','xss', ')', '&/h0&', '&/marquee&']
分词后的负样例:
['_=', '0', 'list=', 'fu0', 'fu0', 'fu0', 'fu0','fu0', 'fu0', 'fu0', 'fu0']
['hid=', 'sgpy', 'windows', 'generic', 'device', 'id','v=', '0.0.0.0', 'brand=', '0', 'platform=', '0', 'ifbak=', '0', 'ifmobile=','0', 'ifauto=', '0', 'type=', '0', 'filename=', 'sgim_privilege.zip']
['iid=', '0', 'device_id=', '0', 'ac=', 'wifi','channel=', 'huawei', 'aid=', '0', 'app_name=', 'news_article','version_code=', '0', 'version_name=', '0.0.0', 'device_platform=', 'android','ssmix=', 'a', 'device_type=', 'fdr', 'a0l', 'device_brand=', 'huawei','language=', 'zh', 'os_api=', '0', 'os_version=', '0.0.0', 'uuid=', '0','openudid=', 'fc0d0ebeb0', 'manifest_version_code=', '0', 'resolution=', '0','0', 'dpi=', '0', 'update_version_code=', '0', '_rticket=', '0']
四、嵌入式词向量
如何将分词后的文本转化为机器学习的问题,第一步是要找到一种方法把这些词数学化。最常见的方法是独热编码(one-hot),这种方法是把词表表示为一个很长的向量,只有一个维度的值为1,其他都为0,如””””&script&”表示为[0,0,0,1,0,0,0,0…….]。这种方法存在一个重要的问题是,构成文本的向量是极其稀疏的,词与词之间是相互独立的,机器学习无法理解词的语义。嵌入式词向量就是通过学习文本来用词向量表征词的语义信息,通过将词嵌入空间使得语义相似的词在空间内的距离接近。空间向量可以表达如“话筒”和“麦克”这样的同义词,”cat”、”dog”、”fish”等词在空间中也会聚集到一起。
在这里我们要使用嵌入式词向量模型建立一个XSS的语义模型,让机器能够理解&script&、alert()这样的HTML语言。取正样例中出现次数最多的3000个词,构成词汇表,其他的词标记为“UKN”,使用gensim模块的word2vec类建模,词空间维度取128维。
核心代码:
def build_dataset(datas,words):
& & count=[["UNK",-1]]
& & counter=Counter(words)
& &count.extend(counter.most_common(vocabulary_size-1))
& & vocabulary=[c[0] for c in count]
& & data_set=[]
& & for data in datas:
& & & & d_set=[]
& & & & for word in data:
& & & & & & if word in vocabulary:
& & & & & & & & d_set.append(word)
& & & & & & else:
& & & & & & & &d_set.append("UNK")
& & & & & & & & count[0][1]+=1
& & & & data_set.append(d_set)
& & return data_set
data_set=build_dataset(datas,words)
model=Word2Vec(data_set,size=embedding_size,window=skip_window,negative=num_sampled,iter=num_iter)
embeddings=model.wv
五、数据预处理
通过建立好的词向量模型,我们就可以用空间向量表示一个文本,结合前面的过程,完整的流程如图:
最后将全部数据随机切分为70%训练数据和30%测试数据,用于以下三个神经网络的训练和测试,代码示例:
from sklearn.model_selection import train_test_split
train_datas,test_datas,train_labels,test_labels=train_test_split(datas,labels,test_size=0.3)
六、多层感知机
多层感知机(MLP)包含一个输入层、输出层和若干隐藏层。Keras可以使用Tensorflow作为后端轻松实现多层感知机,最终整个算法的准确率为99.9%,召回率为97.5%。核心代码如下:
模型训练:
deftrain(train_generator,train_size,input_num,dims_num):
& & print("Start Train Job! ")
& & start=time.time()
& &inputs=InputLayer(input_shape=(input_num,dims_num),batch_size=batch_size)
& & layer1=Dense(100,activation="relu")
& &layer2=Dense(20,activation="relu")
& & flatten=Flatten()
& &layer3=Dense(2,activation="softmax",name="Output")
& & optimizer=Adam()
& & model=Sequential()
& & model.add(inputs)
& & model.add(layer1)
& & model.add(Dropout(0.5))
& & model.add(layer2)
& & model.add(Dropout(0.5))
& & model.add(flatten)
& & model.add(layer3)
& &call=TensorBoard(log_dir=log_dir,write_grads=True,histogram_freq=1)
& &pile(optimizer,loss="categorical_crossentropy",metrics=["accuracy"])
& & model.fit_generator(train_generator,steps_per_epoch=train_size//batch_size,epochs=epochs_num,callbacks=[call])
deftest(model_dir,test_generator,test_size,input_num,dims_num,batch_size):
& & model=load_model(model_dir)
& & labels_pre=[]
& & labels_true=[]
& & batch_num=test_size//batch_size+1
& & steps=0
& & for batch,labels in test_generator:
& & & & if len(labels)==batch_size:
& & & & & &labels_pre.extend(model.predict_on_batch(batch))
& & & & else:
& & & & & &batch=np.concatenate((batch,np.zeros((batch_size-len(labels),input_num,dims_num))))
& & & & & &labels_pre.extend(model.predict_on_batch(batch)[0:len(labels)])
& & & & labels_true.extend(labels)
& & & & steps+=1
& & & & print("%d/%dbatch"%(steps,batch_num))
& &labels_pre=np.array(labels_pre).round()
& & def to_y(labels):
& & & & y=[]
& & & & for i in range(len(labels)):
& & & & & & if labels[i][0]==1:
& & & & & & & & y.append(0)
& & & & & & else:
& & & & & & & & y.append(1)
& & & & return y
& & y_true=to_y(labels_true)
& & y_pre=to_y(labels_pre)
& & precision=precision_score(y_true,y_pre)
& & recall=recall_score(y_true,y_pre)
& & print("Precision score is:",precision)
& & print("Recall score is:",recall)
七、循环神经网络
循环神经网络是一种时间递归神经网络,能够理解序列中上下文的知识,同样使用Keras建立网络,最终模型的准确率为99.5%,召回率为98.7%。核心代码:
模型训练:
def train(train_generator,train_size,input_num,dims_num):
& & print("Start Train Job! ")
& & start=time.time()
& &inputs=InputLayer(input_shape=(input_num,dims_num),batch_size=batch_size)
& & layer1=LSTM(128)
& &output=Dense(2,activation="softmax",name="Output")
& & optimizer=Adam()
& & model=Sequential()
& & model.add(inputs)
& & model.add(layer1)
& & model.add(Dropout(0.5))
& & model.add(output)
& &call=TensorBoard(log_dir=log_dir,write_grads=True,histogram_freq=1)
& &pile(optimizer,loss="categorical_crossentropy",metrics=["accuracy"])
& &model.fit_generator(train_generator,steps_per_epoch=train_size//batch_size,epochs=epochs_num,callbacks=[call])
使用tensorboard对网络的可视化:
八、卷积神经网络
卷积神经网络(CNN)相对于MLP网络减少了需要训练的参数数量,降低了计算量,同时能够提炼深度特征进行分析,这里使用类似于Google VGG的一维卷积神经网络,包含四个卷积层、两个最大池化层、一个全连接层,最终的准确率为99.5%,召回率为98.3%,核心代码:
deftrain(train_generator,train_size,input_num,dims_num):
& & print("Start Train Job! ")
& & start=time.time()
& &inputs=InputLayer(input_shape=(input_num,dims_num),batch_size=batch_size)
& & layer1=Conv1D(64,3,activation="relu")
& &layer2=Conv1D(64,3,activation="relu")
& &layer3=Conv1D(128,3,activation="relu")
& &layer4=Conv1D(128,3,activation="relu")
& &layer5=Dense(128,activation="relu")
& &output=Dense(2,activation="softmax",name="Output")
& & optimizer=Adam()
& & model=Sequential()
& & model.add(inputs)
& & model.add(layer1)
& & model.add(layer2)
& & model.add(MaxPool1D(pool_size=2))
& & model.add(Dropout(0.5))
& & model.add(layer3)
& & model.add(layer4)
& & model.add(MaxPool1D(pool_size=2))
& & model.add(Dropout(0.5))
& & model.add(Flatten())
& & model.add(layer5)
& & model.add(Dropout(0.5))
& & model.add(output)
& &call=TensorBoard(log_dir=log_dir,write_grads=True,histogram_freq=1)
& &pile(optimizer,loss="categorical_crossentropy",metrics=["accuracy"])
& &model.fit_generator(train_generator,steps_per_epoch=train_size//batch_size,epochs=epochs_num,callbacks=[call])
本文介绍了如何使用嵌入式词向量建立XSS语义识别模型,并分别使用MLP、循环神经网络、卷积神经网络三种算法检测XSS攻击,三种算法都取得了不错的效果。
Win7 16G内存
NVIDIA GeForce GTX 960显卡,4G显存
Python环境:python3.5,tensorflow,gensim,keras,numpy等包
代码托管地址:
*本文原创作者:foxscheduler}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信