如何使用keras做SQL注入攻击判定
发布时间:2022-02-11 04:27:17 所属栏目:MySql教程 来源:互联网
导读:小编给大家分享一下如何使用keras做SQL注入攻击判断,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 通过深度学习框架keras来做SQL注入特征识别, 不过虽然用了keras,但
小编给大家分享一下如何使用keras做SQL注入攻击判断,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 通过深度学习框架keras来做SQL注入特征识别, 不过虽然用了keras,但是大部分还是普通的神经网络,只是外加了一些规则化、dropout层(随着深度学习出现的层)。 基本思路就是喂入一堆数据(INT型)、通过神经网络计算(正向、反向)、SOFTMAX多分类概率计算得出各个类的概率,注意:这里只要2个类别:0-正常的文本;1-包含SQL注入的文本 文件分割上,做成了4个python文件: util类,用来将char转换成int(NN要的都是数字类型的,其他任何类型都要转换成int/float这些才能喂入,又称为feed) data类,用来获取训练数据,验证数据的类,由于这里的训练是有监督训练,因此此时需要返回的是个元组(x, y) trainer类,keras的网络模型建模在这里,包括损失函数、训练epoch次数等 predict类,获取几个测试数据,看看效果的预测类 先放trainer类代码,网络定义在这里,最重要的一个,和数据格式一样重要(呵呵,数据格式可是非常重要的,在这种程序中) import SQL注入Data import numpy as np import keras from keras.models import Sequential from keras.layers import Dense, Dropout, Activation from keras.layers.normalization import BatchNormalization from keras.optimizers import SGD x, y=SQL注入Data.loadSQLInjectData() availableVectorSize=15 x=keras.preprocessing.sequence.pad_sequences(x, padding='post', maxlen=availableVectorSize) y=keras.utils.to_categorical(y, num_classes=2) model = Sequential() model.add(Dense(64, activation='relu', input_dim=availableVectorSize)) model.add(BatchNormalization()) model.add(Dropout(0.3)) model.add(Dense(64, activation='relu')) model.add(Dropout(0.3)) model.add(Dense(2, activation='softmax')) sgd = SGD(lr=0.001, momentum=0.9) model.compile(loss='mse', optimizer=sgd, metrics=['accuracy']) history=model.fit(x, y,epochs=500,batch_size=16) model.save('E:sql_checkermodelstrained_models.h6') print("DONE, model saved in path-->E:sql_checkermodelstrained_models.h6") import matplotlib.pyplot as plt plt.plot(history.history['loss']) plt.title('model loss') plt.ylabel('loss') plt.xlabel('epoch') plt.legend(['train', 'test'], loc='upper left') plt.show() 先来解释上面这段plt的代码,因为最容易解释,这段代码是用来把每次epoch的训练的损失loss value用折线图表示出来: 何为训练?何为损失loss value? 训练的目的是为了想让网络最终计算出来的分类数据和我们给出的y一致,那不一致怎么算?不一致就是有损失,也就是说训练的目的是要一致,也就是要损失最小化 怎么让损失最小化?梯度下降,这里用的是SGD优化算法: from keras.optimizers import SGD sgd = SGD(lr=0.001, momentum=0.9) model.compile(loss='mse', optimizer=sgd, metrics=['accuracy']) 上面这段代码的loss='mse'就是定义了用那种损失函数,还有好几种损失函数,大家自己参考啊。 (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |