百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

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

toyiye 2024-06-21 12:35 9 浏览 0 评论

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

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

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

基于SQL的应用程序的常见攻击

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

  1. 欺骗身份
  2. 篡改现有数据
  3. 窃取数据
  4. 销毁数据
  5. 更改数据库权限

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

来自Imperva WAF的统计数据

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

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

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

没有图示的是受攻击最多的数据库(按递减顺序):Oracle,PostgreSQL,MySQL和MongoDB。 同时,受攻击最多的平台是WordPress,Drupal,Joomla和Quest

图2:受攻击网站的国家/地区与攻击来源 - 看到黑客倾向于攻击自己国家/地区内的网站并不奇怪。 当然,这有可能恰恰相反 - 这些结果可能反映了黑客使用在他们攻击的国家/地区拥有端点的VPN /代理,以逃避地理阻塞。

每天大量使用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的语言代码。

攻击示例

以下是我们最近一个月跟踪的一些流行攻击:

VectorIncidentsDescription1 and 1=2 union select password from qianbo_admin634,566Trying to query passwords1’A=0125,365ProbingN;O=D and 1=1

nessus= or 1=1–

CONCAT(‘whs(‘,’)SQLi’)

76,155Probing by vulnerability scanners:

Veracode, Nessus and WhiteHat Security, respectively

‘ union select unhex(hex(version())) —848,096Attempting to discover database version;WAITFOR DELAY ’00:00:28′;1,226,955Blind probing — testing for delay in response

表1:SQL注入攻击的示例

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

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

开发阶段:

使用预准备语句 - 一种“模板化”SQL以使其适应SQL注入的方法。只有某些输入值可以发送到数据库,因此无法运行模板化语句以外的语句。稍后使用不同协议传输的值不像语句模板那样编译。因此不能发生SQL注入。

这里有两个Python代码示例,包含和不包含预准备语句。该代码基于MySQL连接器驱动程序(https://dev.mysql.com/doc/connector-python/en/):

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是您产品保护的重要补充。它可以保护您免受错过的漏洞,同时让您有时间尽可能地修补它们。

原文:https://www.imperva.com/blog/sql-injection-attacks-so-old-but-still-so-relevant-heres-why-charts/

本文:http://pub.intelligentx.net/sql-injection-attacks-so-old-still-so-relevant-heres-why-charts

讨论:请加入知识星球或者小红圈【首席架构师圈】

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码