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

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.rhkb.cn/news/133196.html

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

相关文章

Qt(day1)

思维导图 Qt实现第一个web的基础页面 #include "mywnd.h" #include "ui_mywnd.h" #include<QLabel> #include<QLineEdit> #include<qpushbutton.h>MyWnd::MyWnd(QWidget *parent): QMainWindow(parent), ui(new Ui::MyWnd) {ui->set…

Redis的介绍、安装和配置

文章目录 一、redis官网二、redis是什么三、能干嘛总体功能一图概述优势小总结 三、Redis的下载与安装Redis的安装Redis迭代演化和Redis7新特性新特性部分说明Redis的安装 安装步骤总结Redis的卸载 一、redis官网 https://redis.io/ 中文官网&#xff1a;http://www.redis.cn/…

【【萌新编写risc-v之软件的学习使用】】

萌新编写risc-v软件的学习使用 对于vscode我其实没什么好说的 就是先配置好环境 其实vscde作为一个编译器的软件 其实并不需要指望能往里面加载多少功能 我们需要做的就是赋予编辑器更好用的功能和体验 有些人会在vscode里面甚至加入波形 仿真 我觉得不如交给 vivado来用 在vs…

【计算机网络】传输层协议——TCP(下)

文章目录 1. 三次握手三次握手的本质是建立链接&#xff0c;什么是链接&#xff1f;整体过程三次握手过程中报文丢失问题为什么2次握手不可以&#xff1f;为什么要三次握手&#xff1f; 2. 四次挥手整体过程为什么要等待2MSL 3. 流量控制4. 滑动窗口共识滑动窗口的一般情况理解…

【面试经典150 | 双指针】两数之和

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;暴力枚举方法二&#xff1a;哈希表方法三&#xff1a;二分法方法四&#xff1a;双指针 知识回顾写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢…

【推荐】赴日IT课程 做赴日IT我该学什么?

许多想要做赴日IT的朋友问我说&#xff0c;我都该准备什么&#xff0c;或者我该学些什么才能达到可以做赴日程序员的水平呢&#xff1f;今天我就来跟大家聊一下这个问题。要说做准备&#xff0c;你需要有全日制大专及以上的学历才能获得赴日的资格&#xff0c;如果没有我们就先…

Scrum敏捷开发端到端管理流程

Leangoo领歌是Scrum中文网&#xff08;scrum.cn&#xff09;旗下的一款永久免费的敏捷研发管理工具。 Leangoo领歌覆盖了敏捷研发全流程&#xff0c;它提供端到端敏捷研发管理解决方案&#xff0c;包括小型团队敏捷开发&#xff0c;规模化敏捷SAFe&#xff0c;Scrum of Scrums…

Vue3 Ajax(axios)异步

文章目录 Vue3 Ajax(axios)异步1. 基础1.1 安装Ajax1.2 使用方法1.3 浏览器支持情况 2. GET方法2.1 参数传递2.2 实例 3. POST方法4. 执行多个并发请求5. axios API5.1 传递配置创建请求5.2 请求方法的别名5.3 并发5.4 创建实例5.5 实例方法5.6 请求配置项5.7 响应结构5.8 配置…

PAL/NTSC/1080I和interlaced scan(隔行扫描)

目录 1.PAL/NTSC和1080I 2.PAL/NTSC/1080I的timing 2.1 NTSC的垂直同步 2.2 PAL的垂直同步​编辑 2.3 1080i50FPS的vic20的时序 3.interlaced video timing实现说明 1.PAL/NTSC和1080I NTSC 和PAL 是两种不同视讯标准, 两种都是CRT时代遗留下的产物, 也都使用Interlace技术…

3D WEB轻量化引擎HOOPS Commuicator技术概览(一):数据导入与加载

HOOPS Communicator是一款功能强大的SDK&#xff0c;适用于基于Web的高级工程应用程序&#xff0c;代表HOOPS Web平台的Web开发组件。使用HOOPS Communicator&#xff0c;您可以构建一个在 Web浏览器中提供3D模型的Web应用程序。 HOOPS Communicator可以本地加载多种模型格式。…

Postman应用——初步了解postman

Postman 是一个用于构建和使用 API 的 API 平台&#xff0c;Postman 简化了 API 生命周期的每个步骤并简化了协作&#xff0c;可以更快地创建更好的 API。 Postman 包含一个基于Node.js的强大的运行时&#xff0c;允许您向请求&#xff08;request&#xff09;和分组&#xff…

今晚8点,iPhone15开启预售

北京时间9月15日晚8点&#xff0c;备受全球果粉期待的苹果iPhone15系列手机正式开启预售。此次预售在苹果官网Apple Store在线商店、天猫Apple Store官方旗舰店以及Apple Store官方在线商店微信小程序同步进行。 今年苹果公司将Apple Store在线商店、天猫Apple Store官方旗舰店…

【JAVA】项目部署

IDEA部署maven&#xff1a;https://www.cnblogs.com/ckfuture/p/15821541.html MySQL数据库安装&#xff1a;https://blog.csdn.net/SoloVersion/article/details/123760428 SQLyog安装&#xff1a; https://blog.csdn.net/qq_43543789/article/details/107997510 git安装&a…

JDBC基本概念

什么是JDBC JDBC概念 JDBC&#xff08;Java DataBase Connectivity&#xff09;是一套统一的基于Java语言的关系数据库编程接口规范。 该规范允许将SQL语句作为参数通过JDBC接口发送给远端数据库&#xff0c; …

电子技术基础(三)__第1章电路分析基础_第13篇__正弦交流电的相量表示

本文讲解 正弦交流电的稳态分析————正弦量的相量表示 一 基本概念 接下来&#xff0c; 注意: 大写字母 上 加点 表示相量 例如&#xff1a; 因为这里有 I m I_{m} Im​ 是幅值&#xff0c; 所以此相量称为幅值相量。 相量 其实就是一个复数&#xff0c; 表示正弦量的复…

弗恩基 Flex-N-Gate EDI 需求分析

弗恩基Flex-N-Gate是一家总部位于美国伊利诺伊州的汽车零部件制造公司。该公司成立于1956年&#xff0c;由亿万富翁企业家 Shahid Khan 创办。Flex-N-Gate 主要专注于设计、制造和供应汽车外部和内部零部件&#xff0c;包括前后保险杠系统、灯具、车门零件、悬挂系统等。 该公…

IOMesh 为 KubeVirt 提供高效稳定的持久化存储支持(附用户实践)

7 月 11 日&#xff0c;KubeVirt 社区正式宣布发布 Kubernetes 原生虚拟机管理插件 KubeVirt v1.0。这一版本发布不仅标志着 KubeVirt 已进化为生产就绪的虚拟机管理解决方案&#xff0c;也为正在使用虚拟化环境的用户提供了更多元的云化转型路线&#xff1a;搭配 Kubernetes 持…

【结构型】享元模式(Flyweight)

目录 享元模式(Flyweight)适用场景享元模式实例代码&#xff08;Java&#xff09; 享元模式(Flyweight) 运用共享技术有效地支持大量细粒度的对象。&#xff08;业务模型的对象进行细分得到科学合理的更多对象&#xff09; 适用场景 一个应用程序使用了大量的对象。完全由于…

概率统计笔记:从韦恩图的角度区分 条件概率和联合概率

联合概率&#xff1a;两个或多个事件同时发生的概率。用 P(A∩B) 或 P(A,B) 表示 条件概率&#xff1a;在已知某个事件发生的条件下&#xff0c;另一个事件发生的概率。用P(A∣B) 表示在事件 B 发生的条件下&#xff0c;事件 A 发生的概率。 不难发现联合概率的样本空间更大&am…

小白学Unity03-太空漫游游戏脚本,控制飞船移动旋转

首先搭建好太阳系以及飞机的场景 需要用到3个脚本 1.控制飞机移动旋转 2.控制摄像机LookAt朝向飞机和差值平滑跟踪飞机 3.控制各个星球自转以及围绕太阳旋转&#xff08;rotate()和RotateAround()&#xff09; 1.控制飞机移动旋转的脚本 using System.Collections; using…