「网络安全」SQL注入攻击的真相

前言

点击此处即可获得282G网络安全学习资料

我们生活在数据的黄金时代。有些公司将其分析为更好的自己,有些公司为了获利而进行交易,没有一家公司因其价值而自由放弃 - 对于他们的业务和犯罪分子。

SQL(结构化查询语言)是一种非常流行的与数据库通信的方式。虽然许多新数据库使用非SQL语法,但大多数仍然与SQL兼容。这使得SQL成为任何想要访问数据的人的便利工具,无论他们的动机如何。

SQL注入(或SQLi)攻击已经存在了近20年。他们永远不会停止使用Imperva的Web应用程序防火墙(WAF)。所以我们有丰富的数据和经验可供分享。在这篇文章中,我们将分享Imperva保护下数千个网站的最新统计数据和图表,以及攻击示例以及保护网站的方法。
基于SQL的应用程序的常见攻击

SQL Injection是一种用于攻击应用程序的代码注入技术。攻击者可以使用工具,脚本甚至浏览器将SQL语句插入应用程序字段。然后由数据库引擎执行这些语句。此类攻击通常用于:

  • 欺骗身份
  • 篡改现有数据
  • 窃取数据
  • 销毁数据
  • 更改数据库权限

应用程序背后的数据通常是关键任务,这就是SQL注入攻击被认为非常严重的原因。

来自Imperva WAF的统计数据

Imperva的WAF每天都会在我们保护的网站上减少数百万次SQL注入攻击。我们保护的网站中至少有80%每个月都会受到攻击。我们的数百个网站每天都会面临SQLi攻击。

您可以在下面找到我们监控的攻击中使用的国家,行业和工具的统计数据。

在这里插入图片描述
图1:网站行业分布 - 由于BakerHostetler的2018年网络安全报告指出它是数据泄露最严重的行业,因此受攻击程度最高的行业是健康行业,这一点非常有意思,但并不奇怪。

没有图示的是受攻击最多的数据库(按递减顺序):Oracle,PostgreSQL,MySQL和MongoDB。同时,受攻击最多的平台是WordPress,Drupal,Joomla和Quest。
在这里插入图片描述
图2:受攻击网站的国家/地区与攻击来源 - 看到黑客倾向于攻击自己国家/地区内的网站并不奇怪。当然,这有可能恰恰相反 - 这些结果可能反映了黑客使用在他们攻击的国家/地区拥有端点的V** /代理,以逃避地理阻塞。

每天大量使用SQLi公共漏洞。例如:CVE-2017-8917和CVE-2015-7858都是Joomla SQLi公共漏洞,这些漏洞在我们监控的66,000个事件中使用。
在这里插入图片描述

图3:顶级漏洞扫描程序 - 由于我们计算事件而非请求,每个扫描程序生成的有效负载数量都没有影响。尽管SQLi Dumper取得了成功,但Joomla扫描仪并不落后。

我们每月监控数万个攻击性IP,并使用攻击分析来查找恶意IP并防范它们。我们通过分析过去几个月的攻击IP收集了一些有趣的统计数据:

在这里插入图片描述
图4:日复一日尝试SQLi攻击的IP。蓝色:在当天和当天尝试SQLi攻击的IP的百分比,在当天尝试SQLi攻击的IP中。橙色:包含由这些攻击IP发送的SQLi尝试的请求的百分比,包含SQLi尝试的总请求数。

令人好奇的是,即使平均每天不到三分之一的IP攻击(蓝线),他们的请求构成了超过80%的SQLi请求(橙色线)。这可能是由于各种漏洞扫描程序正在进行扫描。这些工具倾向于轰炸目标以寻找漏洞,这解释了高IP到请求比率。
在这里插入图片描述
图5:顶级攻击工具 - 非常通用且广泛使用,因此cURL占据如此重要的位置并不奇怪。但是,深入分析显示,与cURL一起发送的大多数可疑请求实际上是攻击后检查,即被阻止的黑客,然后使用cURL来测试他们是否仍然

可以访问该网站。cURL紧随其后的是Python - 黑客的首选武器,以及Ruby - 用于编写Metasploit的语言代码。

攻击示例

以下是我们最近一个月跟踪的一些流行攻击:
在这里插入图片描述

如何保护您的应用程序免受SQL注入

有许多方法可以保护您的应用程序免受SQL注入攻击。有些应该在应用程序开发期间使用,其他应该在部署应用程序后使用。

开发阶段:
使用预准备语句 - 一种“模板化”SQL以使其适应SQL注入的方法。只有某些输入值可以发送到数据库,因此无法运行模板化语句以外的语句。稍后使用不同协议传输的值不像语句模板那样编译。因此不能发生SQL注入。
这里有两个Python代码示例,包含和不包含预准备语句。该代码基于MySQL连接器驱动程序(dev.mysql.com/doc/connect…
def add_employee(id: int, email: str):

sql = “””INSERT INTO employees (id, email) VALUES (%s, %s)””” cursor =

connection.cursor(prepared=True) cursor.execute(sql, (id, email)) cnx.commit() cursor.close()

Python代码示例。这些值将发送到与SQL文本分开的“执行方法”。

def add_employee(id: int, email: str): sql = f”””INSERT INTO employees (id, email) VALUES

({id}, {email})””” cursor = connection.cursor() cursor.execute(sql)

上面是没有预准备语句的Python代码示例。电子邮件可能包含可由数据库引擎执行的SQL注入语句。
除了预处理语句之外,还有其他方法可以在开发和部署应用程序期间阻止SQL注入:

1.消毒 - 摆脱任何可能是恶意的特殊字符,单词或短语。例如,删除保留字SELECT或CONTACT,或删除短语WAIT FOR DELAY或DROP TABLE。这不是最佳实践,但在某些情况下它可能很有用。

2.转义 - 转义在SQL中具有特殊含义的字符。例如,用两个单引号替换双引号。这是一种简单但易于出错的方式。

3.转义和模式检查 - 可以验证数字和布尔参数数据类型,而字符串参数可以限制为模式。

4.数据库权限限制 - 将应用程序用户的权限限制为仅需要的权限,因为它可能有助于降低攻击的有效性。

后开发 - 应用程序安全性:

  • 漏洞扫描程序 - 这些可以检测应用程序中的SQL注入漏洞,以后可以由开发团队修复。请记住,应用程序会不断变化 - 因此您应定期运行扫描程序。
  • Web应用程序防火墙 - WAF还可以检测和阻止对您的应用程序的攻击。

总结

保护产品免受SQL注入是必不可少的,以确保其正常运行并防止数据泄露。

当您编写访问数据库的代码时,考虑从一开始就防止SQL注入是一种很好的做法。这是防止这些漏洞发生的最佳时机,而不是以后修补它们。开发过程应包括针对SQL注入的测试,然后是外部扫描程序。
最后,WAF是您产品保护的重要补充。它可以保护您免受错过的漏洞,同时让您有时间尽可能地修补它们。

点击此处即可获得282G网络安全学习资料

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

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

相关文章

【技术干货】如何通过 DP 实现支持经典蓝牙的联网单品设备与 App 配对

经典蓝牙模块(Classic Bluetooth)主要用于呼叫和音频传输,所以经典蓝牙最主要的特点就是功耗大,传输数据量大。蓝牙耳机、蓝牙音箱等场景大多采用经典蓝牙,因为蓝牙是为传输声音而设计的,是短距离音频传输的…

钡铼DLT645和IEC104转Modbus协议网关BL120DT:构建智能电力网的关键角色

在电力行业中,DLT645和IEC104转Modbus协议网关已成为重要的通信工具,用于将电力设备的数据和状态信息转换为Modbus协议,以便于远程监控和管理。以下是关于钡铼DLT645和IEC104转Modbus协议网关BL120DT在电力行业应用的案例介绍。 某电力公司需…

自动化项目实战->测试博客系统

1.熟悉项目-->哪些场景容易出现问题 2.针对核心流程设计测试用例(手工测试用例) 3.将手工测试用例转换为自动化测试用例 4.部署到服务器 一、针对核心流程设计测试用例 二、将手工测试用例转换为自动化测试用例 2.1设计自动化测试用例的代码结构 初始化动作:BeforeAll--…

[图论]哈尔滨工业大学(哈工大 HIT)学习笔记23-31

视频来源:4.1.1 背景_哔哩哔哩_bilibili 目录 1. 哈密顿图 1.1. 背景 1.2. 哈氏图 2. 邻接矩阵/邻接表 3. 关联矩阵 3.1. 定义 4. 带权图 1. 哈密顿图 1.1. 背景 (1)以地球为建模,从一个大城市开始遍历其他大城市并且返回…

SSM - Springboot - MyBatis-Plus 全栈体系(二十一)

第四章 SpringMVC 四、RESTFUL 风格设计和实战 1. RESTFul 风格概述 1.1 RESTFul 风格简介 RESTful(Representational State Transfer)是一种软件架构风格,用于设计网络应用程序和服务之间的通信。它是一种基于标准 HTTP 方法的简单和轻量…

[架构之路-232]:目标系统 - 纵向分层 - 操作系统 - 数据存储:文件系统存储方法汇总

目录 前言: 一、文件系统存储方法基本原理和常见应用案例: 二、Windows FAT文件系统 2.1 概述 三、Linux EXT文件系统 3.1 基本原理 3.2 索引节点表(Inode Table) 3.2.1 索引节点表层次结构 3.2.2 间接索引表的大小和表项…

Netty全面了解, 使用,有这一篇就够了

目录 引言: 什么是Netty? Netty和Tomcat有什么区别? 为什么Netty受欢迎? Netty为什么并发高 Netty为什么传输快 为什么说Netty封装好? 使用示例: 步骤1: 添加Netty依赖 步骤2: 创建服务器启动类 步…

OpenResty安装-(基于Nginx的高性能Web平台,可在Nginx端编码业务)

文章目录 安装OpenResty1.安装1)安装开发库2)安装OpenResty仓库3)安装OpenResty4)安装opm工具5)目录结构6)配置nginx的环境变量 2.启动和运行3.备注 安装OpenResty 1.安装 首先你的Linux虚拟机必须联网 …

风储VSG-基于虚拟同步发电机的风储并网系统Simulink仿真

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

小程序中如何核销订单和优惠券

小程序已成为许多商家线上线下开展业务的重要渠道。客户在小程序中下单/领券后,可能需要商家现场扫码核销,例如超市购物、卖票、游乐园等线下场景。下面就介绍小程序中如何核销订单和优惠券。 一、订单核销 订单核销是指商家在小程序中确认顾客已经支付…

开环模块化多电平换流器仿真(MMC)N=6(Simulink仿真)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【Vue面试题六】为什么Vue中的 v-if 和 v-for 不建议一起用?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:v-if和v-for的优先级是什…

socket简介

套接字(Socket)实质上就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,为应用层进程利网络协议交换数据提供了相应机制。套接字出于承上启下的作用,向上连接应用进程&#xf…

Linux:TCP三握四挥简析

文章目录 1. 前言2. 背景3. TCP连接的建立和断开3.1 TCP协议状态机3.2 TCP的三握四挥3.2.1 TCP 连接建立的三次握手过程分析3.2.1.1 服务端和客户端套接字的创建3.2.1.2 服务端进入 LISTEN 状态3.2.1.3 服务端在 LISTEN 状态等待客户端的 SYN 请求3.2.1.4 客户端向服务端发送 S…

基于虚拟同步发电机控制的双机并联Simulink仿真模型

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

webserver项目

利用无锁工作队列的Web服务器设计 项目地址https://github.com/whitehat32/webserver_no_lock 基本流程与牛客版的一致,下面放一个牛客版的流程框图 引言 在Web服务器的设计与实现中,性能优化是永远不会过时的话题。一般来说,Web服务器需…

精确到区县级街道乡镇行政边界geojson格式矢量数据的获取拼接实现Echarts数据可视化大屏地理坐标信息地图的解决方案

在Echarts制作地理信息坐标地图时,最麻烦的就是街道乡镇级别的行政geojson的获取, 文件大小 788M 文件格式 .json格式,由于是大文件数据,无法直接使用记事本或者IDE编辑器打开,推荐Dadroit Viewer(国外…

基于粒子群优化算法、鲸鱼算法、改进的淘沙骆驼模型算法(PSO/SSA/tGSSA)的微电网优化调度(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

1.5 计算机网络的类别

思维导图: 1.5.1 计算机网络的定义 我的笔记: #### 精确定义: 计算机网络没有统一的精确定义,但一种较为接近的定义是:计算机网络主要由一些通用的、可编程的硬件互连而成,这些硬件并非专门用来实现某一特…

【Redis】数据过期策略和数据淘汰策略

数据过期策略和淘汰策略 过期策略 Redis所有的数据结构都可以设置过期时间,时间一到,就会自动删除。 问题:大家都知道,Redis是单线程的,如果同一时间太多key过期,Redis删除的时间也会占用线程的处理时间…