跳转到主要内容

SQL 注入

本文约需 2 分钟阅读

SQL 注入 (SQL Injection) 是指向 Web 应用程序的输入表单等注入恶意 SQL 语句,从而非法操控数据库的攻击手法。它是一种极其危险的漏洞,可能导致绕过认证、窃取、篡改或删除数据,甚至夺取服务器的控制权。它在 OWASP Top 10 中长年位居前列, 2024 年注入攻击仍被列为主要威胁类别。

现场使用案例

“在渗透测试中,我们在搜索功能的查询参数中插入了 UNION SELECT,结果取得了用户表的全部记录。我们正在最优先推进向参数化查询的迁移。”

SQL 注入的流程

输入恶意 SQL
服务器执行 SQL
从数据库非法获取数据
信息泄露 / 篡改

攻击的原理

将用户输入直接拼入 SQL 语句的程序会成为攻击目标。例如,在登录表单中输入「' OR 1=1 --」即可绕过认证,或使用 UNION 子句获取其他表的数据。在盲注 (Blind SQL Injection) 中,即使不显示错误消息,也能根据真假值的差异推测数据。SQL 注入防御书籍 (Amazon)可供详细学习。

具体的受害情景

一种常见的误解是「SQL 注入是一种过时的攻击手法,现代系统中不会发生」。实际上,即使在改造遗留系统或新开发的过程中,仍然会发现不使用参数化查询、而通过字符串拼接构建 SQL 的代码。 2024 年也有报告称,某大型企业的数据库通过 SQL 注入泄露了数百万条客户信息。由于攻击者会使用自动化工具 (如 sqlmap) 高效地搜寻存在漏洞的网站,因此即便是小型网站也会成为目标。

作为用户的防范

SQL 注入是服务器端的漏洞,但作为用户也需要做好防范。如果为每项服务设置独立的随机密码,那么即使某一项服务发生数据泄露,其他账户也仍然安全。如果你使用的服务公布了数据泄露,请尽快更改密码。数据保护书籍 (Amazon)也可作为参考。

相关术语

这篇文章对您有帮助吗?

XHatena