如何预防 SQL 注入?

简介

SQL 注入就是通过把 SQL 命令插入到 Web 表单提交或输入页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 语句的目的。

具体来说,SQL 注入就是利用现有应用程序的漏洞,将恶意的 SQL 命令注入到后台数据库引擎,从而执行恶意的 SQL 命令,实现对数据库甚至整个应用程序的攻击。

SQL 注入主要是通过在表单中输入带 SQL 命令的字符串。

SQL 注入的原理

SQL 注入攻击通过构建特殊的输入作为参数传入应用程序,而这些输入大都是 SQL 语法里的一些组合, 这些组合会改变应用程序中原有的 SQL 语句,这样,原本正常的 SQL 就变成了恶意的 SQL。这就是 SQL 注入的原理。

SQL 注入的产生原因

  • 应用程序没有细致地过滤用户输入的数据,导致非法数据侵入系统。
  • 应用程序对数据库的 SQL 操作,本身就存在漏洞。

SQL 注入的示例

下面简单描述一个通过 SQL 注入绕过登录验证的例子。

假如:有一个登录验证的 SQL 为:

SELECT * FROM users WHERE name='user01' AND password=md5('123456')

现在,有一个攻击者,在登录表单的用户名处,直接输入:

' or 1=1 #

然后,随便输入的密码,如 abc123,点击登录。

这时,原先的 SQL 就变成了恶意的 SQL:

SELECT * FROM users WHERE name='' or 1=1 #' AND password=md5('abc123')

注: 在 MySQL 中,# 号表示注释。

可以发现,这个恶意 SQL 的 where 条件永远为真。这样,攻击者就绕过了登录验证,进入了存在 SQL 漏洞的应用程序。

当然,SQL 注入攻击不仅仅是绕过登录验证。

预防 SQL 注入的措施

SQL 注入的危害非常大,我们必须进行预防。

可以结合以下两种措施来有效防止 SQL 注入。

  • 过滤用户的输入。永远不要相信用户的输入,我们必须对用户输入的数据进行细致严格地过滤。比如,可使用 PHP 的 htmlspecialchars() 函数将字符串中的特殊字符转化为 HTML 实体字符。
  • 操作数据库时,使用预处理和参数绑定。推荐使用 PDO 来操作数据库。

猜你喜欢

转载自blog.csdn.net/lamp_yang_3533/article/details/79948834
今日推荐