Akamai dots background

SQL 注入教程

本 SQL 注入教程简单介绍了企业和公共组织中最常见的 Web 安全威胁之一。 SQL 注入教程包含以下四个主题:

  • SQL 注入攻击环境
  • SQL 注入攻击目标
  • SQL 注入攻击方式
  • 防御 SQL 注入攻击的方式

SQL 注入教程主题 1: SQL 注入攻击环境

大多数现代 Web 应用程序具有相同的基本结构和逻辑流:Web 客户端(通常为浏览器)与 Web 服务器上托管的 Web 应用程序通信,而 Web 应用程序则与一个或多个后台数据库进行通信。 数据库用于存储与应用程序相关的各种信息,例如用户名/密码组合以及用户帐户数据。 最终用户可以通过在网页表单(如登录表单或搜索表单)中输入相应内容来进行访问和修改。 Web 应用程序将根据用户输入的信息向数据库发送命令,这通常是使用结构化查询语言 (SQL) — 大部分现代关系数据库的命令语言。 数据库响应后,Web 应用程序随后对用户作出响应。

SQL 注入教程主题 2: SQL 注入攻击目标

在 SQL 注入攻击中,精通 SQL 语法的黑客在网页表单中提交虚假条目,旨在比 Web 应用程序更直接地、远距离访问后台数据库。 多数情况下,此类攻击都是企图检索有价值的信息,例如用户名/密码组合或敏感财务或企业数据。 在某些情况下,SQL 注入攻击也可能视图修改数据(例如帐户余额)或恶意删除数据。 利用这些方式,SQL 注入攻击可能会导致主要的网络安全漏洞。

SQL 注入教程主题 3: SQL 注入攻击方式

SQL 注入的攻击方式是:黑客在 Web 表单输入字段中输入特定的 SQL 条款和字符,以欺骗应用程序向数据库发送不同于应用程序正常发送的命令。 作为简化示例(源自开放式 Web 应用程序安全项目 [OWASP] 网站),考虑以下情况:在其中写入应用程序代码,以在数据库中执行以下命令:

---------------

SELECT * FROM accounts

WHERE owner =

AND accountname = ;

---------------

此命令用于从“帐户”表中检索帐户信息,但在少数情况下,会在表中的相同条目中找到具体的所有者名称和帐户名称。 要检查的特定所有者名称和帐户名称由最终用户通过网页表单提供。

攻击者可能会在 web 表单中输入伪造的所有者名称以及“name' 或 ‘x'='x'”的帐户名称。 如果应用程序对注入攻击缺乏足够的防御,单引号字符以及 OR 的使用可以将修改后的 SQL 命令发送至数据库:

---------------

SELECT * FROM accounts

WHERE owner = ‘smith'

AND accountname = ‘name' OR ‘x' = ‘x';

---------------

常用限制性 WHERE 从句现在可以满足“帐户”表中的每一条记录,因为当未找到所有者/帐户名称组合“smith/name”时,从句的 OR 部分(即 ‘x'='x')始终为真。 因此,表中的每一条记录均可以返回到应用程序或最终用户。

SQL 注入教程主题 4: 防御 SQL 注入攻击的方式

本 SQL 注入教程简要地介绍了 SQL 注入攻击的目的和基本技术。 对于 web 应用程序所有者,关键问题是如何抵御此类攻击。 一般有两种方法:

  • 小心地对应用程序编码 各种编程最佳实践可以显著降低 Web 应用程序的 SQL 注入漏洞。 这些包括使用参数化的查询或存储程序;或者使用字符黑名单或白名单,以过滤和净化至 web 表单的用户输入。 但是,完全依赖好的编程并不足以确保 Web 服务安全数据保护。 部分原因为大多数 Web 应用程序是许多不同编程人员长期工作的结果;此外,改编存在漏洞的现有 Web 应用程序代价非常高。
  • 在 web 应用程序前端部署 Web Application Firewall (WAF),以检测和过滤流入的 HTTP 流量。 WAF 可以对 SQL 注入进行有效防御,但传统的应急 WAF 也很容易成为性能瓶颈。

Akama 基于云的 web 安全解决方案已将 WAF 集成到 Akamai 全球 Web 内容交付网络中。 该解决方案可以提供针对 SQL 注入攻击的广泛分布式前位防御,并且不会影响您的 web 应用程序性能。 此解决方案还可以防御以下越来越流行的攻击战术:在对 Web 财产发起拒绝服务攻击的同时对其进行 SQL 注入攻击。

进一步了解 Akamai 高度可扩展基于云的云安全解决方案