在网络安全领域,SQL注入可以说是众所周知的。即使是从未接触过web安全的站长,也或多或少听过这个词,是目前使用最多的漏洞之一。
什么是SQL注入?
SQL是一种操作数据库数据的结构化查询语言。当网页的应用数据与后台数据库中的数据进行交互时,会用到SQL。SQL注入是将网页的原始URL、表单域或数据包的参数修改拼接成SQL语句,传递给Web服务器,再传递给数据库服务器执行数据库命令。
如果Web应用程序的开发人员将用户输入的数据或cookie不经过滤或验证直接传输到数据库,则可能执行拼接的SQL,获取数据库的信息和数据库的权限,发生SQL注入攻击。
SQL的方法原理
SQL注入攻击的核心是让Web服务器执行攻击者所期望的SQL语句,以获取数据库中感兴趣的数据或对数据库进行读取、修改、删除、插入等操作,从而达到其恶意目的。
那么如何让Web服务器执行攻击者的SQL语句呢?SQL注入的常规做法是将SQL语句放入表单或请求参数中,然后提交给后端服务器。如果后端服务器不检查输入安全,直接取出变量进行数据库查询很容易被抓到。例如:
对于根据用户ID获取用户信息的接口,后端的SQL语句一般是这样的:
其中$id是前端提交的用户id,如果前端请求是这样的:
其中,请求参数id为1或者转义后1=1。如果后端不经过安全过滤直接提交数据库查询,SQL语句将变成:
从而将用户表中的数据全部找出来,达到黑客泄露数据的目的。
以上只是一个非常简单的例子,一次真实的SQL注入袭击。它的参数构造和SQL语句比这个复杂很多,但原理是一样的。
如何预防SQL注入
如果您使用的是第三方CMS程序,请将该程序升级到最新版本。
过滤用户输入的数据。默认情况下,所有用户的输入都应该被认为是不安全的。
在网页代码中,要对用户输入的数据进行严格过滤。
部署Web应用程序防火墙。
监控数据库操作。