目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
大家好,这里是海浪学长计算机毕设专题,本次分享的课题是
🎯基于信息安全的SQL注入检测系统
项目背景
SQL注入是一种常见的攻击方式,通过恶意构造的SQL查询语句,攻击者可以绕过应用程序的身份验证和授权机制,获取敏感数据或对数据库进行破坏。SQL注入检测系统对于保护信息系统的安全至关重要。该课题旨在利用深度学习和计算机视觉技术,结合大量真实的SQL注入攻击数据,构建一个高效准确的检测系统,提供对SQL注入攻击的实时监测和防护,以提升信息系统的安全性。
数据集
由于网络上没有现有的合适的数据集,我决定自己进行网络爬取,收集了大量的SQL注入攻击数据,并制作了一个全新的数据集。这个数据集包含了各种不同类型的SQL注入攻击样本,涵盖了不同的攻击场景和变种。通过网络爬取的方式,我能够获取到真实的SQL注入攻击数据,这将为我的研究提供更准确、可靠的数据。
设计思路
FlexUDA模型采用TextCNN网络进行电商文本数据的处理和分类,通过卷积和池化操作捕捉文本的局部特征,并利用全连接层输出分类结果。词向量的输入可以使用预训练的词向量,并结合TF-IDF等方法进行处理。TextCNN模型在存储和计算效率方面优于传统的神经网络模型。TextCNN模型主要分为4个部分:
- 输入层(Input layer):接受输入的句子矩阵,其中,z代表句子中的单词数,k代表每个词对应的词向量的维度。由于句子矩阵需要统一维度,需要对句子进行padding,补0或截断。
- 卷积层(Convolution layer):使用不同大小的卷积核对输入的句子矩阵进行卷积操作。卷积核的宽度与词矩阵的宽度相等,以保证每次滑动都能取到完整的词向量。卷积层可以提取不同大小的局部特征信息。
- 池化层(Pooling layer):对卷积层得到的特征进行筛选聚合,减少计算量和防止过拟合的发生。常用的池化方式是使用最大值池化(max pooling)。
- 全连接层(Fully Connected layer):将经过卷积和池化的结果展开成一维向量,然后通过激活函数输出各个类别的概率。

监督数据增强(UDA)是一种半监督学习算法。该方法通过强制要求无标签样本和增强后的无标签样本的预测结果保持一致,以达到更好的训练效果,并有效解决由于有标签数据集较小导致的过拟合问题。对于有标签的训练样本,使用交叉熵损失函数来度量模型的预测结果与真实标签之间的差异。对于无标签的训练样本,首先对其进行数据增强,生成增强后的样本。然后,将原始样本和增强后的样本输入模型进行预测,并比较它们的预测结果。一致性损失通过衡量原始样本和增强后样本的预测结果之间的一致性来促使模型学习更鲁棒的特征表示,使得模型对于相似的输入具有相似的输出。
FlexUDA模型输入包括有标签数据和无标签数据。经过预处理后,有标签数据使用TextCNN网络计算交叉熵损失,而无标签数据则进行增强。增强后的数据与原始无标签数据一起输入TextCNN网络,利用Flex技术对无标签数据的预测结果进行伪标签打标,并计算一致性损失。在训练过程中,有监督和无监督得到的损失按照1:1的比例求和,形成总损失。然后使用总损失进行网络参数的更新,以获得更好的半监督训练模型。为了优化半监督学习模型,在UDA模型训练的初始阶段,只有少数样本能够超过设定的阈值,导致每个批次中选中的样本较少,数据利用率低,收敛速度慢。此外,模型的随机初始化可能导致预测朝着错误的方向倾斜,从而降低拟合效果。

数据预处理是机器学习和深度学习中至关重要的步骤,它通过解码处理、泛化处理和分词处理来提取有效的特征并排除无关噪声,从而提高模型训练的效率和精确度。优质的预处理能够排除干扰噪声和无用特征,使模型能够学习到更具针对性的特征。解码处理针对常见编码方式进行操作,泛化处理去除相似无用特征,分词处理方便后续的向量化。
通过计算TF-IDF值对无标签数据进行增强变换的具体实现如下首先,将TF-IDF稀疏压缩矩阵按照TF-IDF值降序排列,并设定第500个TF-IDF值为阈值d。然后,循环遍历每条输入样本(经过预处理的SQI语句)。通过计算TF-IDF值对无标签数据进行增强变换的方法,可以有效地扩充无标签数据集。具体实现中,根据设定的阈值d和替换概率,针对每个分词的TF-IDF值大小进行操作。对于TF-IDF值大于阈值d的分词,以较低的概率从前500个分词中选择一个进行替换;对于TF-IDF值小于阈值d的分词,以较高的概率从500个分词以后的分词中选择一个进行替换。通过这种方式,可以生成增强后的无标签数据样本,扩展数据集并增加数据的多样性和泛化能力。
在文本向量化方面,TF-IDF是一种常用的加权技术,可以评估词对于文件集或语料库中某个文件的重要程度。而Word2Vec是一种高效训练词向量的算法,可以保留词语之间的语义信息和上下文关系。为了同时提取文本中的重要信息和保留上下文关系,将TF-IDF和Word2Vec融合使用,以获取更有用的特征。

改进后的算法使用了PyTorch框架进行代码实现。为了加速计算,CUDA和CUDNN被用于计算加速,而TensorboardX被用于记录和保存评价指标数据。优化算法采用Adam算法,利用动量和F1适应学习率来加快网络的收敛速度。该算法的实现简单、计算高效,对内存需求较小,并且参数的更新不受梯度的伸缩变换影响。超参数具有很好的解释性,通常不需要进行调整或者仅需微调。通过使用IambdaR调度器对优化器的学习率进行调整,进一步优化训练过程。损失函数方面,使用交叉熵损失和一致性损失来分别计算有监督和无监督部分的损失。
实验在GPU环境下进行计算,使用了机器学习框架PyTorch,并在PyCharm开发平台下进行开发,使用Python语言编写代码。通过在GPU上进行计算,可以充分利用GPU的并行计算能力,加速训练和推理过程,提高算法的效率和性能。PyTorch作为一种流行的深度学习框架,提供了丰富的工具和函数,使开发过程更加便捷和灵活。PyCharm作为一种集成开发环境,提供了强大的代码编辑、调试和可视化功能,方便开发人员进行代码编写和调试。

实验使用了准确率(Accuracy)、精确率(Precision)、召回率(Recall)和F1-score等评价指标。准确率是指分类器正确预测的样本数占总样本数的比例,精确率是指分类器预测为正类的样本中真正为正类的比例,召回率是指真正为正类的样本中被分类器正确预测为正类的比例。而F1-score是综合考虑精确率和召回率的指标,它是精确率和召回率的调和平均值,能够综合评估分类器的性能。

相关代码示例:
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from gensim.models import Word2Vec
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from sklearn.svm import SVC
def preprocess_data(data):
def enhance_data_with_tfidf(data):
def vectorize_data(data):
def train_model(X_train, y_train):
def evaluate_model(model, X_test, y_test):
data = load_data()
preprocessed_data = preprocess_data(data)
X_train, X_test, y_train, y_test = train_test_split(preprocessed_data, labels, test_size=0.2, random_state=42)
enhanced_data = enhance_data_with_tfidf(X_train)
vectorized_data = vectorize_data(enhanced_data)
model = train_model(vectorized_data, y_train)
evaluate_model(model, X_test, y_test)
海浪学长项目示例:






1万+



被折叠的 条评论
为什么被折叠?



