【深度学习】网络安全,SQL注入识别,SQL注入检测,基于深度学习的sql注入语句识别,数据集,代码

文章目录

  • 一、 什么是sql注入
  • 二、 sql注入的例子
  • 三、 深度学习模型
    • 3.1. SQL注入识别任务
    • 3.2. 使用全连接神经网络来做分类
    • 3.3. 使用bert来做sql语句分类
  • 四、 深度学习模型的算法推理和部署
  • 五、代码获取

一、 什么是sql注入

SQL注入是一种常见的网络安全漏洞,它允许攻击者通过向应用程序的输入字段插入恶意SQL代码来执行未经授权的数据库操作。这种攻击通常发生在使用SQL数据库的网站或应用程序中。攻击者可以利用这个漏洞来获取敏感数据、修改数据、甚至完全控制数据库。

SQL注入的原理是利用应用程序在处理用户输入时未正确过滤或转义数据的漏洞。通过在输入字段中插入SQL代码片段,攻击者可以改变SQL查询的逻辑,从而执行意外的数据库操作。这种攻击可能会导致严重的安全问题,包括数据泄露、数据损坏和系统崩溃。

为了防止SQL注入攻击,开发人员应该使用参数化查询或预编译语句等安全的数据库访问方法,并对用户输入进行适当的验证和过滤。另外,定期对应用程序进行安全审计和漏洞扫描也是很重要的。

二、 sql注入的例子

在这个数据集中,第一列就是sql语句,Label列是1就表示这个sql语句是非正常的sql注入:

在这里插入图片描述

Label列是0就表示这个sql语句是正常的sql语句:

在这里插入图片描述

三、 深度学习模型

3.1. SQL注入识别任务

任务目标:输入sql字符串,模型判断出是正常sql语句还是不正常的sql语句。是个分类问题。

3.2. 使用全连接神经网络来做分类

这是部分代码:


# 使用 TF-IDF 权重来转换文本特征为数值特征
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(X_text)# 对标签进行编码和one-hot编码
label_encoder = LabelEncoder()
y_encoded = label_encoder.fit_transform(y)
onehot_encoder = OneHotEncoder(sparse_output=False)
y_onehot = onehot_encoder.fit_transform(y_encoded.reshape(-1, 1))# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y_onehot, test_size=0.3, random_state=42)# 转换为PyTorch张量
X_train_tensor = torch.tensor(X_train.toarray(), dtype=torch.float32)
X_test_tensor = torch.tensor(X_test.toarray(), dtype=torch.float32)
y_train_tensor = torch.tensor(y_train, dtype=torch.float32)
y_test_tensor = torch.tensor(y_test, dtype=torch.float32)# 定义神经网络模型
class Net(nn.Module):def __init__(self, input_size, output_size):super(Net, self).__init__()self.fc1 = nn.Linear(input_size, 128)self.fc2 = nn.Linear(128, 64)self.fc3 = nn.Linear(64, output_size)self.dropout = nn.Dropout(0.5)self.init_weights()def forward(self, x):x = torch.relu(self.fc1(x))x = self.dropout(x)x = torch.relu(self.fc2(x))x = self.dropout(x)x = self.fc3(x)return x# 初始化参数,kaiming初始化def init_weights(self):for m in self.modules():if type(m) == nn.Linear:nn.init.kaiming_normal_(m.weight)m.bias.data.fill_(0.01)

全连接神经网络来做分类在这个任务中是不可以的,原因是会过拟合,一开始的TfidfVectorizer不可取,下面是指标图和损失变化图,可以看出,这个模型是不行的。

在这里插入图片描述
在这里插入图片描述

3.3. 使用bert来做sql语句分类

这是部分代码:


tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForSequenceClassification.from_pretrained(model_name, num_labels=len(label_encoder.classes_))
model.to(device)# 设置优化器和学习率调度器
optimizer = AdamW(model.parameters(), lr=4e-6)
total_steps = len(train_loader) * 20  # 5 个周期
scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps=0, num_training_steps=total_steps)# 初始化指标存储字典
metrics_dict = {'accuracy': [], 'recall': [], 'f1_score': [], 'loss': []}# 训练模型
model.train()
for epoch in range(20):  # 5 个周期total_loss = 0for batch in tqdm(train_loader, desc=f"Epoch {epoch + 1}", unit="batch"):input_ids, attention_mask, labels = tuple(t.to(device) for t in batch)optimizer.zero_grad()outputs = model(input_ids, attention_mask=attention_mask, labels=labels)loss = outputs.losstotal_loss += loss.item()loss.backward()optimizer.step()scheduler.step()

bert是可取的方法,相当于做字符串的分类,下面是bert的训练结果:

在这里插入图片描述

在这里插入图片描述

四、 深度学习模型的算法推理和部署

模型训练后保存为模型文件,部署就是直接用训练好的模型文件进行算法服务。

深度学习模型的算法推理指的是使用预训练的BERT模型对输入的SQL查询进行分类预测,判断其是否存在SQL注入的风险。下面我来解释一下代码中的主要步骤以及如何进行算法推理:

  1. 加载预训练模型和tokenizer:

    • 使用BertTokenizer.from_pretrained加载预训练的BERT模型的tokenizer,用于将输入的文本编码为模型可以理解的格式。
    • 使用BertForSequenceClassification.from_pretrained加载预训练的BERT模型,这是一个针对文本分类任务进行微调的模型。
  2. 定义预测函数predict

    • 输入参数为需要进行分类预测的文本字符串。
    • 使用tokenizer对输入文本进行编码,并确保与训练时使用的最大长度一致。
    • 将编码后的文本数据移动到模型所在的设备(GPU或CPU)。
    • 使用model进行预测,并获取预测结果的类别和概率。
    • 将预测结果格式化为易于理解的字符串形式,并返回包含预测结果和每个类别概率的字典。
  3. 示例使用模型进行预测:

    • 给定一个SQL查询文本作为输入,调用predict函数进行分类预测。
    • 打印输出预测结果,包括预测的类别和其对应的概率。

在这个过程中,模型的算法推理是指模型根据输入的文本数据,利用预训练好的权重和网络结构,计算出对应的预测结果。

结合gradio和fatapi,可以开启web界面和接口,运行代码后,web界面如下,可以输入一个sql字符串,然后模型判断这个字符串的类别:

在这里插入图片描述

接口访问也是可以的,比如这样访问算法服务接口:

import requestsurl = "http://127.0.0.1:7860/predict"  # 确保这与您的FastAPI服务地址匹配# 准备请求的数据
data = {"text": "SELECT * FROM porch FETCH FIRST 50 PERCENT ROWS ONLY"
}
# 发送POST请求
response = requests.post(url, json=data)# 处理响应
if response.status_code == 200:result = response.json()print("预测结果:", result)
else:print(f"请求失败,状态码:{response.status_code}, 错误信息:{response.text}")

五、代码获取

这里获取:

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

代码内容如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【进程间通信】共享内存

文章目录 共享内存常用的接口指令利用命名管道实现同步机制总结 System V的IPC资源的生命周期都是随内核的。 共享内存 共享内存也是为了进程间进行通信的,因为进程间具有独立性,通信的本质是两个不同的进程看到同一份公共资源,所以共享内存…

Java 11 到 Java 8 的兼容性转换

Java 11 到 Java 8 的兼容性转换 欲倚绿窗伴卿卿,颇悔今生误道行。有心持钵丛林去,又负美人一片情。 静坐修观法眼开,祈求三宝降灵台,观中诸圣何曾见?不请情人却自来。 入山投谒得道僧,求教上师说因明。争奈…

WordPress MasterStudy LMS插件 SQL注入漏洞复现(CVE-2024-1512)

0x01 产品简介 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。WordPress plugin是一个应用插件。 0x02 漏洞概述 WordPress Plugin MasterStudy LMS 3.2.5 版本及之…

java项目之在线课程管理系统源码(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的在线课程管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 在线课程管理系统的主要…

Nginx配置/.well-known/pki-validation/

当你需要在Nginx上配置.well-known/pki-validation/时,这通常是为了支持SSL证书的自动续订或其他验证目的。以下是配置步骤: 创建目录结构: 在你的网站根目录下创建一个名为.well-known的目录(SSL证书申请之如何创建/.well-known/…

Linux环境Redis部署

Redis部署 Redis是一个高性能的开源键值存储系统,它主要基于内存操作,但也支持数据的持久化。与其他数据库相比,Redis的主要优势在于它的高性能、丰富的数据结构和原生的持久化能力。Redis不仅提供了类似的功能,还增加了持久化和…

[初阶数据结构】单链表

前言 📚作者简介:爱编程的小马,正在学习C/C,Linux及MySQL。 📚本文收录于初阶数据结构系列,本专栏主要是针对时间、空间复杂度,顺序表和链表、栈和队列、二叉树以及各类排序算法,持…

如何使用client-go构建pod web shell

代码示例及原理 原理是利用websocket协议实现对pod的exec登录,利用client-go构造与远程apiserver的长连接,将对pod容器的输入和pod容器的输出重定向到我们的io方法中,从而实现浏览器端的虚拟终端的效果消息体结构如下 type Connection stru…

Meta更低的训练成本取得更好的性能: 多token预测(Multi-Token Prediction)

Meta提出了一种透过多token预测(Multi-token Prediction)来训练更好、更快的大型语言模型的方法。这篇论文的重点如下: 训练语言模型同时预测多个未来的token,可以提高样本效率(sample efficiency)。 在推论阶段,使用多token预测可以达到最高3倍的加速。 论文的主要贡献包括: …

ES集群数据备份与迁移

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、文章涉及概念讲解二、操作步骤1.创建 snapshot repository操作主机hadoop1分别操作从机hadoop2和hadoop3 2. 查看仓库信息3. 备份索引,生成快照…

【S32K UDS BootLoader】-1.1-Unified bootloader Demo和ECUBus工具的使用

<--返回「Autosar_MCAL高阶配置」专栏主页--> 目录 1 下载S32K1/S32K3/S12Z Unified bootloader Demo 1.1 在S32DS中编译S32K312_CAN_bootloader_RTD2d0工程并烧录 2 ECUBus工具使用 2.1 PCAN环境搭建 1.1.1 安装PCAN驱动 1.1.2 安装PCAN-View 2.2 下载并安装ECU…

C语言 | Leetcode C语言题解之第77题组合

题目&#xff1a; 题解&#xff1a; int** combine(int n, int k, int* returnSize, int** returnColumnSizes) {int* temp malloc(sizeof(int) * (k 1));int tempSize 0;int** ans malloc(sizeof(int*) * 200001);int ansSize 0;// 初始化// 将 temp 中 [0, k - 1] 每个…

回答篇:测试开发高频面试题目

引用之前文章&#xff1a;《测试开发高频面试题目》 https://blog.csdn.net/qq_41214208/article/details/138193469?spm1001.2014.3001.5502 本篇文章是回答篇&#xff08;持续更新中&#xff09; 1. 什么是测试开发以及其在软件开发流程中的作用。 a. 测试开发是指测试人员或…

关于Anaconda常用的命令

常用命令 查看当前环境下的环境&#xff1a;conda env list查看当前conda的版本&#xff1b;conda --version conda create -n your_env_name pythonX.X&#xff08;2.7、3.6等)命令创建python版本为X.X。名字为your_env_name的虚拟环境。your_env_name文件可以在Anaconda安装…

收银系统源码--什么是千呼智慧新零售系统?

千呼智慧新零售系统是一套针对零售行业线上线下一体化收银系统。给门店提供线下称重收银、o2o线上商城、erp进销存、精细化会员管理、丰富营销插件等一体化解决方案。多端数据打通&#xff0c;实现线上线下一体化&#xff0c;提升门店工作效率&#xff0c;实现数字化升级&#…

前端项目加载离线的百度地图,利用工具进行切指定区域的地图影像,自定义图层getTilesUrl

百度地图在开发中我们经常使用&#xff0c;但是有些项目是需要在内网进行&#xff0c;这时候我们不得不考虑项目中一些功能需要请求外网静态资源&#xff0c;比如百度地图。只有把包下载到本地&#xff0c;才能让静态资源文件的正常的访问。 目录 获取百度地图开发秘钥 引入在…

Java | Leetcode Java题解之第78题子集

题目&#xff1a; 题解&#xff1a; class Solution {List<Integer> t new ArrayList<Integer>();List<List<Integer>> ans new ArrayList<List<Integer>>();public List<List<Integer>> subsets(int[] nums) {dfs(0, nums…

牛客网刷题 | BC81 KiKi求质数个数

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 KiKi知道了什么是质…

【离散数学】集合上二元关系性质判定的实现(c语言实现)

实验要求 关系矩阵的初始化和打印 我们将关系矩阵存入一个二维数组中&#xff0c;因为集合元素个数不会超过5个所以就用一个5行5列二维数组来表示。 在我们得到了集合元素个数之后我们就可以对数组进行0,1随机赋值 //初始关系矩阵 void init_matrix(int array[][5], int n) {…

多核DSP并行计算跨平台通信解决方案

并行计算的核心是计算节点以及节点间的通信与协调机制。OpenMP虽然给开发者提供了极易上手的增量式开发方式&#xff0c;但是OpenMP在与复杂架构的MCSDK结合后&#xff0c;工具与代码产生了大量不可调试的黑盒子&#xff0c;更是决定了它不能用于关键任务领域&#xff0c;如军工…