SQL 注入是最常见和最基本的网络攻击类型之一。不幸的是,SQL 注入也是应用程序可能面临的最具破坏性的威胁之一。这些攻击经常导致数据丢失,对共享数据库的基础设施尤其危险。本文介绍了 如何防止 SQL 注入。请继续阅读以了解什么是 SQL 注入、这些攻击的工作原理以及公司采取哪些步骤来保护其数据库免受恶意注入。,, 什么是 SQL 注入攻击?,SQL 注入 (SQLi) 是一种网络攻击,黑客通过应用程序运行恶意 SQL 语句来操纵数据库。这些攻击会影响任何依赖 SQL 数据库(MySQL、Oracle、Sybase、Microsoft SQL Server、Access、Ingres 等)的网站或 Web 应用程序。,我们的 MySQL 命令备忘单 概述了掌握此 RDBMS 所需的最重要命令。,SQLi 的后果从轻微到严重不等。在注入之后,黑客可以:,伤害的程度取决于攻击者的能力。受害者可能会遇到从几个数据库错误到完全接管 Web 服务器的任何事情。, 如何防止 SQL 注入攻击?,企业可以采取多种有效措施来防止 SQLi 攻击。, 消毒输入,输入清理(或验证)是检查和过滤用户输入的做法。这种技术确保应用程序可以识别非法用户输入和危险的可执行文件。,开发人员可以通过三种方式清理输入:,通常,白名单比黑名单更简单、更安全。聪明的黑客可以找到绕过黑名单的方法,因此请尽可能使用白名单验证用户输入。,另一个好的做法是使用下拉菜单和单选按钮验证用户输入。这些输入字段可防止用户输入输入并停止注入可执行代码。, 参数化 SQL 代码,参数化查询要求开发人员首先定义所有 SQL 代码,然后将每个参数传递给查询。这种编码风格使数据库能够区分代码和数据,这是动态 SQL 查询无法实现的功能。,参数化 SQL 代码可防止攻击者更改查询的意图,即使他们插入了命令。例如,如果黑客输入用户 ID ‘1’=’1,则查询将查找与整个’1’=’1 字符串匹配的用户名 。数据库不会将查询作为命令接受。, 限制用户权限,采用 零信任安全性 并将用户限制为他们执行角色所需的最低限度的权限。具有读写执行权限的帐户越少越好。,例如,如果一个网站只返回数据库内容与 SELECT 声明,不授予连接其他特权,比如 INSERT, UPDATE或者 DELETE。,另一个好的做法是不信任所有用户输入。以与来自外部和第三方来源的输入相同的方式处理来自内部用户的输入。此外,永远不要让 Web 应用程序以管理员权限连接到数据库。, 设置防火墙,使用 Web 应用程序防火墙 (WAF) 过滤 Web 应用程序和数据库之间的所有流量。防火墙保护所有面向 Web 的应用程序,因此设置防御以阻止 SQLi 和类似的网络攻击。, 定期测试,运行安全测试以检查数据库和相关应用程序的弹性。定期测试对于发现所有网络攻击的漏洞至关重要。考虑运行:,加密数据库中的所有私人和机密数据。如果攻击者设法泄露敏感数据,加密还提供了额外的保护级别。, 不向用户显示数据库错误,数据库错误消息绝不能显示在客户端 Web 浏览器上。攻击者可以使用错误消息中的技术细节来调整查询以实现成功注入。,不要显示带有有用信息的错误消息,而是设置简单的基于单词的错误消息,为给您带来的不便表示歉意。, 培训和维护 SQLi 意识,防止 SQL 注入是一项团队工作,所有员工都必须知道网络安全的重要性 。为所有开发人员、QA 人员、系统管理员和DevOps提供合适的安全培训 。, 虽然很危险,但 SQLi 攻击很容易预防,尽管 SQL 注入可能具有破坏性,但组织良好的公司永远不应成为这些攻击的受害者。设置适当的预防措施并确保您的数据库能够抵抗 SQL 注入。, ,SQL 注入是最常见和最基本的网络攻击类型之一。不幸的是,SQL 注入也是应用程序可能面临的最具破坏性的威胁之一。这些攻击经常导致数据丢失,对共享数据库的基础设施尤其危险。本文介绍了 如何防止 SQL 注入。请继续阅读以了解什么是 SQL 注入、这些攻击的工作原理以及公司采取哪些步骤来保护其数据库免受恶意注入。,, 设置防火墙
SQL 注入 (SQLi) 是现存最危险和最常见的漏洞之一。然而,在过去几年中,由于易用性和可扩展性,NoSQL 数据库作为 Web 应用程序和分布式云平台的后端数据库越来越受欢迎。鉴于在这些 NoSQL(非 SQL/不仅是 SQL)数据库中不执行 SQL 查询,这是否意味着非 SQL 数据库不易受到注入攻击?抱歉不行。那么,如何防范NoSQL呢?让我们从 NoSQL 注入的概述开始。,,NoSQL是一个广义术语,用于指代不使用 SQL 查询语言的非关系数据库/数据存储系统。一些示例包括 MongoDB、Cassandra DB、CouchDB 和 Riak。其中,MongoDB 是最受欢迎的数据库。,虽然 SQL 数据库存储在表中,但在非 SQL 数据存储系统中使用了更适合目的/上下文的多种数据模型。例如,对象、文档、图形、键值、列族等等。由于支持动态模式定义,因此可以根据敏捷开发周期轻松添加/修改新字段和数据,这与 SQL 数据库不同。,将恶意负载注入非 SQL 数据库(例如 MongoDB)的网络攻击称为 NoSQL 注入。,SQL 注入是在查询(尤其是来自用户的查询)未经过清理时引起的,允许攻击者修改数据库引擎以包含在数据库中执行命令的恶意输入。但是,SQLi 不能在非 SQL 数据库上执行,因为它们没有特定的语言。它们具有特定于产品的语法和查询语法,这些语法和查询语法是用应用程序语言本身编写的。,结果 ——NoSQL 数据库不仅可以被攻击者破坏,而且恶意代码/未经验证的输入可以在应用程序本身中执行。因此,DDoS 攻击可以被精心策划,或者服务器被接管或攻击者利用非 SQL 注入漏洞泄露机密用户信息。,,在典型的 NoSQL 架构中,数据访问是通过驱动程序完成的。数据库客户端的多种语言库可通过驱动程序访问协议获得。考虑到驱动程序可能不易受攻击,但其中可能存在不安全的 API,如果开发人员不安全地实施这些 API,可能会导致在数据库和应用程序本身上执行任意代码。,让我们考虑一下 MongoDB 的例子。,例如:,下面的代码片段使用$where查询运算符检索名称为“Rafael Silver”的记录。,,在这里,攻击者可以通过变量$userData插入未经过滤的用户输入,,如果注入成功,他可能会注入字符串“a”;sleep (5000)进入变量$userData,这将通过服务器 5 秒——这足以让攻击者执行他需要的东西。,,不安全编码的风险加剧,因为这些数据库对于一些只熟悉 SQL 和关系数据库的开发人员来说仍然是新奇的。必须仔细通读 NoSQL 数据库的安全指南和手册。开发人员必须了解所使用的语言,以确保避免易受攻击的结构。,开发人员必须选择这些快速发展且年轻的数据库的最新可用版本。例如,流行的 MongoDB 的初始版本在多个层面的设计都是不安全的,导致致命的注入攻击,而最新版本在安全方面得到了加强。,与 SQL 注入一样,在构建数据库查询时,必须避免在应用程序代码中使用未经过滤的用户输入。必须验证所有用户输入以确保不使用恶意值。虽然内置功能在非 SQL 数据库(如 MongoDB)中可用,以避免在数据库查询中使用 JavaScript,但如果 JavaScript 不可避免,则输入验证是必须的。,通常,在 Web 应用程序安全中,必须遵循最小权限原则。这样,在攻击成功的情况下,攻击者的影响范围就会受到限制。,NoSQL ≠ 无注入攻击。非 SQL 数据库容易受到危险和破坏性的攻击,必须主动预防。即使在开发和部署过程中尽了最大努力,应用程序中仍可能存在漏洞,导致非 SQL 注入的风险增加。采用像AppTrana这样的全面、智能和托管的安全解决方案对于先发制人的攻击和加强应用程序安全性非常有价值。, ,SQL 注入 (SQLi) 是现存最危险和最常见的漏洞之一。然而,在过去几年中,由于易用性和可扩展性,NoSQL 数据库作为 Web 应用程序和分布式云平台的后端数据库越来越受欢迎。鉴于在这些 NoSQL(非 SQL/不仅是 SQL)数据库中不执行 SQL 查询,这是否意味着非 SQL 数据库不易受到注入攻击?抱歉不行。那么,如何防范NoSQL呢?让我们从 NoSQL 注入的概述开始。,SQL 注入是在查询(尤其是来自用户的查询)未经过清理时引起的,允许攻击者修改数据库引擎以包含在数据库中执行命令的恶意输入。但是,SQLi 不能在非 SQL 数据库上执行,因为它们没有特定的语言。它们具有特定于产品的语法和查询语法,这些语法和查询语法是用应用程序语言本身编写的。,
您知道17 年前首次发现SQL 注入攻击吗?然而,它仍然在OWASP 十大漏洞列表中名列前茅。这个漏洞是什么?它如何影响您的应用程序?你能为这个做什么?这是帮助您了解此 OWASP 十大漏洞及其业务影响的指南。如何停止 SQL 注入?您可以先通过AppTrana 免费试用了解您的网站是否存在 SQL 注入风险。,,数据库是一组描述的表,可以从中访问或存储数据。使用数据库的应用程序需要一种媒介来在前端和数据库之间进行通信。这就是 SQL 发挥作用的地方。结构化查询语言 (SQL) 是一种用于访问和操作数据库中数据的语言。应用程序可以使用 SQL 语句与数据库进行通信。使用 SQL 语句,应用程序可以执行一些标准的 SQL 命令,例如“SELECT”、“UPDATE”、“INSERT”、“DELETE”、“CREATE”、“DROP”。,大多数 .com/tag/web” target=”_blank”>Web 应用程序使用称为结构化查询语言 (SQL) 的机器可理解的语言与数据库进行交互。攻击者使用 Web 应用程序中的输入字段在服务器上运行任意查询(注入);因此,攻击过程称为 SQL 注入或SQLi 攻击。,常见的 SQL 注入攻击会导致知识丢失或拒绝访问。然而,多年来,黑客将这些攻击与身份验证不足、DNS 劫持、XSS 和 DDoS 相结合,造成严重的经济损失和绝对的主机接管。以下是近年来最著名的一些 SQL 攻击。,当未经适当验证的用户输入直接作为 SQL 查询传递给 SQL 解释器以进行处理时,应用程序很容易受到 SQL 注入的攻击。这导致执行用户输入并提供预期的结果。,下面的场景解释了一个 Web 应用程序,它接受用户的用户名和密码,并直接传入要执行的查询,案例 1:应用程序接受用户输入并传入 SQL 查询,,案例 2:在用户名参数中添加了单引号。结果,数据库运行以下查询,,由于 OR 1=1,’ WHERE 子句从表 users 中返回第一个 id。成功执行此 SQL 命令后,攻击者可以绕过身份验证。,攻击者怎么知道你的漏洞?,步骤1:,攻击者使用包括机器人和软件在内的自动化机制扫描数千个网站以寻找 SQL 注入。一些最常测试的字段是 URL 和表单。在这里很难停止 SQL 注入。,第2步:,审判。他分析漏洞的严重性并渗透到数据库中。,第 3 步:,精心设计了一个虚假输入命令,牢记漏洞,然后在该时间段内对其进行测试。如果它授予对数据库的访问权限,攻击者可以诱骗应用程序泄露所有记录。,第4步:,更致命的攻击者会寻找其他漏洞并同时利用它们来获取非法经济收益和主机控制权。,例子:,登录表单是验证用户的最常用方法之一。,,验证功能对应的服务器代码为:,现在,黑客只需在任一输入框中输入“或”“=”即可验证 SQL。它将为他提供表用户中的所有行。,, ,您知道17 年前首次发现SQL 注入攻击吗?然而,它仍然在OWASP 十大漏洞列表中名列前茅。这个漏洞是什么?它如何影响您的应用程序?你能为这个做什么?这是帮助您了解此 OWASP 十大漏洞及其业务影响的指南。如何停止 SQL 注入?您可以先通过AppTrana 免费试用了解您的网站是否存在 SQL 注入风险。,当未经适当验证的用户输入直接作为 SQL 查询传递给 SQL 解释器以进行处理时,应用程序很容易受到 SQL 注入的攻击。这导致执行用户输入并提供预期的结果。,
SQL 注入是最常见和最基本的网络攻击类型之一。不幸的是,SQL 注入也是应用程序可能面临的最具破坏性的威胁之一。这些攻击经常导致数据丢失,对共享数据库的基础设施尤其危险。本文介绍了 如何防止 SQL 注入。请继续阅读以了解什么是 SQL 注入、这些攻击的工作原理以及公司采取哪些步骤来保护其数据库免受恶意注入。,, 什么是 SQL 注入攻击?,SQL 注入 (SQLi) 是一种网络攻击,黑客通过应用程序运行恶意 SQL 语句来操纵数据库。这些攻击会影响任何依赖 SQL 数据库(MySQL、Oracle、Sybase、Microsoft SQL Server、Access、Ingres 等)的网站或 Web 应用程序。,我们的 MySQL 命令备忘单 概述了掌握此 RDBMS 所需的最重要命令。,SQLi 的后果从轻微到严重不等。在注入之后,黑客可以:,伤害的程度取决于攻击者的能力。受害者可能会遇到从几个数据库错误到完全接管 Web 服务器的任何事情。, 如何防止 SQL 注入攻击?,企业可以采取多种有效措施来防止 SQLi 攻击。, 消毒输入,输入清理(或验证)是检查和过滤用户输入的做法。这种技术确保应用程序可以识别非法用户输入和危险的可执行文件。,开发人员可以通过三种方式清理输入:,通常,白名单比黑名单更简单、更安全。聪明的黑客可以找到绕过黑名单的方法,因此请尽可能使用白名单验证用户输入。,另一个好的做法是使用下拉菜单和单选按钮验证用户输入。这些输入字段可防止用户输入输入并停止注入可执行代码。, 参数化 SQL 代码,参数化查询要求开发人员首先定义所有 SQL 代码,然后将每个参数传递给查询。这种编码风格使数据库能够区分代码和数据,这是动态 SQL 查询无法实现的功能。,参数化 SQL 代码可防止攻击者更改查询的意图,即使他们插入了命令。例如,如果黑客输入用户 ID ‘1’=’1,则查询将查找与整个’1’=’1 字符串匹配的用户名 。数据库不会将查询作为命令接受。, 限制用户权限,采用 零信任安全性 并将用户限制为他们执行角色所需的最低限度的权限。具有读写执行权限的帐户越少越好。,例如,如果一个网站只返回数据库内容与 SELECT 声明,不授予连接其他特权,比如 INSERT, UPDATE或者 DELETE。,另一个好的做法是不信任所有用户输入。以与来自外部和第三方来源的输入相同的方式处理来自内部用户的输入。此外,永远不要让 Web 应用程序以管理员权限连接到数据库。, 设置防火墙,使用 Web 应用程序防火墙 (WAF) 过滤 Web 应用程序和数据库之间的所有流量。防火墙保护所有面向 Web 的应用程序,因此设置防御以阻止 SQLi 和类似的网络攻击。, 定期测试,运行安全测试以检查数据库和相关应用程序的弹性。定期测试对于发现所有网络攻击的漏洞至关重要。考虑运行:,加密数据库中的所有私人和机密数据。如果攻击者设法泄露敏感数据,加密还提供了额外的保护级别。, 不向用户显示数据库错误,数据库错误消息绝不能显示在客户端 Web 浏览器上。攻击者可以使用错误消息中的技术细节来调整查询以实现成功注入。,不要显示带有有用信息的错误消息,而是设置简单的基于单词的错误消息,为给您带来的不便表示歉意。, 培训和维护 SQLi 意识,防止 SQL 注入是一项团队工作,所有员工都必须知道网络安全的重要性 。为所有开发人员、QA 人员、系统管理员和DevOps提供合适的安全培训 。, 虽然很危险,但 SQLi 攻击很容易预防,尽管 SQL 注入可能具有破坏性,但组织良好的公司永远不应成为这些攻击的受害者。设置适当的预防措施并确保您的数据库能够抵抗 SQL 注入。, ,SQL 注入是最常见和最基本的网络攻击类型之一。不幸的是,SQL 注入也是应用程序可能面临的最具破坏性的威胁之一。这些攻击经常导致数据丢失,对共享数据库的基础设施尤其危险。本文介绍了 如何防止 SQL 注入。请继续阅读以了解什么是 SQL 注入、这些攻击的工作原理以及公司采取哪些步骤来保护其数据库免受恶意注入。,SQLi 的后果从轻微到严重不等。在注入之后,黑客可以:,