人工智能安全-6-SQL注入检测

news2024/12/23 10:22:29

0 提纲

  • 概述
  • SQL注入方法
  • SQL注入的检测方法
  • SQL语句的特征提取
  • 天池AI上的实践

1 概述

SQLIA:SQL injection attack SQL 注入攻击是一个简单且被广泛理解的技术,它把 SQL 查询片段插入到 GET 或 POST 参数里提交到网络应用。
由于SQL数据库在Web应用中的普遍性,使得SQL攻击在很多网站上都可以进行。并且这种攻击技术的难度不高,但攻击变换手段众多,危害性大,使得它成为网络安全中比较棘手的安全问题。

1.1 当前发展水平与现状

SQLIA 被大量关注并有丰富的文献
基于端到端的网站应用架构的 5 个关键层简要回顾现有途径,并给出解决方案提议:

  • 客户端
  • 网络应用防火墙(WAF)
  • 网络应用
  • 数据库防火墙
  • 数据库服务器

在这里插入图片描述

2 SQL注入方法

发生于Web+数据库的应用架构中
Web页面存在注入点,如一个登录页面:
在这里插入图片描述
假如对登录用户身份进行合法性验证的SQL语句为:

select * from user where name = ‘{$name}’ and password ={$password}

攻击者即使没有该网站的用户账号和密码,但是他也可能绕过账号验证而获得相应登录权限。只需在登录提交表单中,密码框输入1 or 2=2从而生成如下的注入SQL。此时登录验证的SQL语句被攻击者构造为:

select * from users where username='asndfas' and passwd=1 or 2=2

在密码框中输入2345; drop table tmp,从而形成了如下的注入SQL,其中注入的分号是将SQL指令分成多条指令执行。

select * from users where username='bbb' and passwd=2345; drop table tmp

由此会产生严重的数据库安全问题。

3 SQL注入的检测方法

SQL注入的检测通常要对输入的内容进行校验,其中较为有效的是对请求数据格式或者内容进行规则处理。目前主要的检测方法有:

  • 针对特定类型的检查;
  • 对特定格式的检查;
  • SQL预编译的防御方法;
  • 机器学习方法。

4 SQL语句的特征提取

SQL的表示:

  • 对SQL语句采用N-Grams表示
  • 语法树的表示形式

在这里插入图片描述

4.1 标记图的方式及思路

定义SQL语句中的标记(Token),把SQL中的关键字、标识符、操作符、分隔符、变量以及其他符号都称为标记。
一条SQL查询,无论是真正的查询还是注入的查询,都是一个标记序列。
检测的基本思路就是,对真正查询和注入查询的序列进行特征提取,然后在特征空间中构建识别注入查询的分类器模型。

定义映射表
在这里插入图片描述
两个例子:
(1)

 select * from books where price>20.5 and discount<0.8

规范化为:

 SELECT STAR FROM USRTBL WHERE USRCOL GT DEC AND USRCOL LT DEC

(2)

select count(*), sum(amount) from orders order by sum(amount)

规范化为:

SELECT COUNT STAR CMMA SUM USRCOL FROM USRTBL ORDER BY SUM USRCOL

对规范化后的序列,构造标记图:
在这里插入图片描述
可以构造的图种类包括:有向图/无向图, 含权图/无权图。

上面例子每个边的权重置为1, 生成的是无权图。

最终,对一个SQL查询可以转换成为标记图:
在这里插入图片描述
进一步对该图提取特征,可以是节点的度/入度/出度/紧密度等,从而将一个查询转换成为SQL标记的特征向量。而后可以使用各类分类器进行训练。

4.2 文本分析的思路

由于注入内容是一种文本信息,其语法基本遵循SQL语言,而非扎乱无章的内容。从这点看,它与自然语言类似。因此,可以尝试按照自然语言文本分类的方式来进行SQL注入的检测。
把SQL语句注入的请求信息进行分割,按照逻辑顺序进行切分,在逻辑上存在间隔的地方加上空格。 例如:

--post-data "Login='and'1'='1~~~&Password='and'1'='1~~~&ret_page='and'1'='1~~~&qu erystring='and'1'='1~~~&FormAction=login&FormName=Login" 

转化为:

-post-data "Login=' and '1'='1~~~&Password=' and '1'='1~~~&ret_page=' and '1'='1~~~&querystring=' and '1'='1~~~&FormAction=login&FormName=Login” 

接下来,采用普通的文本分类技术,使用信息增益、方差阈值等特征选择方法选择有利于分类的Top K个特征,从而完成文本向量空间的构建。
从文本的角度,当然也可以把文本分类中的经典神经网络用来进行SQL注入的检测。例如Text CNN等。

5 天池AI上的实践

数据集是来自一个网站收集的链接请求,只有normal/attack两类,分别对应于标签0/1。该数据集共480条记录,有注入记录339条,正常记录141条。以下两条记录分别是注入和非注入样本。
基本思路是,把整个训练文本集进行切分,转换称为tf-idf向量,然后使用各类分类器进行训练和测试。
(1)数据处理部分
‘’’
train_data = pd.read_csv(“train.txt”, header = None, sep = “,”)
test_data = pd.read_csv(“test.txt”, header = None, sep = “,”)
train_data.dropna(inplace = True) #删除有缺失值的行
test_data.dropna(inplace = True)

(2)文本-向量转换处理,使用sklearn提供的TfidfVectorizer完成向量表示。
(3)构建分类器,测试性能
- 可以实现神经网络模型等更多分类器进行测试

在这里插入图片描述

在线实验入口:
https://tianchi.aliyun.com/course/990

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

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

相关文章

【微服务实战之Docker容器】第四章-【微服务实战之Docker容器】第三章-镜像仓库

系列文章目录 【微服务实战之Docker容器】第一章-下载及安装 文章目录 系列文章目录坑&#xff1a;容器卷记得加入以下命令配置是个啥&#xff1f;能干啥&#xff1f;基本的命令读写规则映射添加说明卷的继承和共享 坑&#xff1a;容器卷记得加入以下命令配置 --privilegedtr…

van-calendar 实现移动端日历效果

<!--移动端端展示日历--><divv-if"isMobile &&tabActiveName true &&(formName 值班日历 || formName 值班编排)"><template v-if"Array.isArray(listData) && listData.length"><van-calendar:poppable&…

一生一芯14——chisel环境搭建

本人使用的ubuntu版本为22.04 anaconda 版本为23.1.0 本博客参考自https://blog.csdn.net/qq_38798111/article/details/129190615?ops_request_misc%257B%2522request%255Fid%2522%253A%2522169465704516800222836484%2522%252C%2522scm%2522%253A%252220140713.130102334…%…

芯科蓝牙BG27开发笔记8-片上Flash读写

目标 熟悉片上Flash的特点&#xff0c;知道如何使用&#xff0c;最好找到示例代码&#xff0c;有完整例程那是最好的 查找参考手册 除了768K的主空间&#xff0c;还包含&#xff1a; 1. USERDATA区域&#xff0c;用户定义数据&#xff0c;可以读写。大小只有1K。 2. 设备特…

长胜证券:十大流通股东占比例高好还是低好?

近年来&#xff0c;跟着我国本钱商场的不断发展&#xff0c;越来越多的投资者开始了解和关注股东占比这个目标。而在股东占比中&#xff0c;十大流转股东的持股份额是一个重要的目标。可是&#xff0c;关于投资者来说&#xff0c;十大流转股东占比是高好还是低好&#xff1f;本…

【SPI读取外部Flash】使用逻辑分析仪来读取FLASH Device ID

实验设备&#xff1a;25块钱的 逻辑分析仪 和 野火F429开发板 注意点&#xff0c;这个逻辑分析仪最大只能检测24M的波形&#xff0c;而SPI是在外部通道2&#xff0c;所以我们对系统时钟的分频&#xff0c;也就是给到通道2的时钟速度要在24M内&#xff0c;不然检测到的数据是有…

Peppertype.ai:人工智能内容营销平台

【产品介绍】 名称 Peppertype.ai 具体描述 Peppertype.ai是一个AI驱动的文章生成工具&#xff0c;可以帮助你在几秒钟内为各种渠道创建吸引人 的内容。无论你是想要写广告文案、社交媒体标题、博客大纲还是网站内容&#xff0c;Peppertype…

C++ PrimerPlus 复习 第五章 循环和关系表达式

第一章 命令编译链接文件 make文件 第二章 进入c 第三章 处理数据 第四章 复合类型 &#xff08;上&#xff09; 第四章 复合类型 &#xff08;下&#xff09; 第五章 循环和关系表达式 文章目录 for循环&#xff1b;基本语法重要问题和解答 基于范围的for循环&#xff08…

中秋学习Qt6

中秋学习Qt6 【1】Qt6 新增的模块【2】Qt6剔除模块和方法【3】Qt6改进 【1】Qt6 新增的模块 Qt6引入了一些新的模块&#xff0c;以便提供更多的功能和改进。以下是一些Qt6新增的模块&#xff1a; QtQuick3D&#xff1a;Qt6引入了全新的3D引擎模块QtQuick3D&#xff0c;它提供了…

脚本:python绘制七夕爱心

文章目录 效果脚本Reference 效果 脚本 import random from math import sin, cos, pi, log from tkinter import *CANVAS_WIDTH 640 # 画布的宽 CANVAS_HEIGHT 640 # 画布的高 CANVAS_CENTER_X CANVAS_WIDTH / 2 # 画布中心的X轴坐标 CANVAS_CENTER_Y CANVAS_HEIGHT /…

ABB 1TGE120010R1300 控制主板模块

ABB 1TGE120010R1300 控制主板模块是一种用于控制和监测电力设备的模块&#xff0c;具有以下功能&#xff1a; 控制和监测电力设备&#xff1a;该模块可以通过与电力设备连接来控制和监测设备的性能和状态&#xff0c;例如启停设备、调节电压和功率等。 通信功能&#xff1a;该…

学Python的漫画漫步进阶 -- 第十六步

学Python的漫画漫步进阶 -- 第十六步 十六、多线程16.1 线程相关的知识16.1.1 进程16.1.2 线程16.1.3 主线程 16.2 线程模块——threading16.3 创建子线程16.3.1 自定义函数实现线程体16.3.2 自定义线程类实现线程体 16.4 线程管理16.4.1 等待线程结束16.4.2 线程停止 16.5 动动…

【ant-design-vue】ant-design-vue在uniapp使用时,auto-import失败报错

前言 在我的 uniapp vue3 vite 项目中&#xff0c;使用了 ant-design-vue 4.x 组件库&#xff0c;同时我还使用了 vite 插件 auto-import 用于自动导入vue3的组合式api。当我全局引用antd-vue时&#xff0c;开发模式下可以正常运行&#xff0c;却不能 npm run build 正常打包…

港联证券:“保险+期货”快速落地生花 涉及品种累计达18个

从普洱火车站出发&#xff0c;乘车3小时40分钟&#xff0c;经过250公里山路之后&#xff0c;能够到达云南西南边境的孟连县。孟连县全称孟连傣族拉祜族佤族自治县&#xff0c;“孟连”音自傣语&#xff0c;意为“寻找到的好地方”。这里属亚热带气候&#xff0c;热区资源丰富&a…

与社交媒体结合:视频直播美颜sdk在社交平台上的应用

为了让直播内容更吸引人&#xff0c;视频直播美颜sdk&#xff08;Software Development Kit&#xff09;正逐渐崭露头角&#xff0c;为社交媒体用户提供了卓越的美颜效果和互动体验。 一、什么是视频直播美颜sdk&#xff1f; 在深入讨论如何将视频直播美颜sdk整合到社交媒体平…

vue2 项目中嵌入视频

案例&#xff1a; 代码&#xff1a; <template><div class"schematicDiagramIndex"><el-container><el-aside width"20rem"><!-- <h4 style"font-size: 18px">视频演示</h4>--><div style…

低代码平台:通过可视化的开发工具和组件库,可快速地构建应用程序,从而实现快速迭代和升级

概述&#xff1a; 低代码是一种新兴的应用程序开发方式&#xff0c;无需编码或通过少量代码就可以快速生成应用程序的开发平台。通过可视化的开发工具和组件库&#xff0c;使得开发人员可以快速地构建应用程序&#xff0c;从而实现快速迭代和升级。 低代码平台的出现是为了解…

Centos 7.4 系统,使用wireshark 抓包,获取数据包来源IP(生产环境测试可用)

1 安装wireshark yum install wireshark &#xff08;也可以使用rpm包安装&#xff0c;但是依赖包较多&#xff0c;安装可能需要多一点时间&#xff09; 2 安装完后&#xff0c;抓取数据包 tshark -i ens192 -Y "ip.dst 192.168.120.59 and tcp.dstport 4006 and fra…

微信小程序Snapshot导出海报

开启skyline app.json "lazyCodeLoading": "requiredComponents","renderer": "skyline","componentFramework": "glass-easel","rendererOptions": {"skyline": {"defaultDisplayBlo…

cuda以及pytorch安装

安装CUDA显卡驱动 这篇博客已经超级详细&#xff0c;具体就不在闭门造车了&#xff01; 最简单、实用的cuda安装教程&#xff01;&#xff01;&#xff01;&#xff08;nvidia官方渠道下载&#xff09; 检测CUDA版本&#xff08;cmd窗口命令行下&#xff09; nvidia-sminvcc…