更新时间:2022-08-16 来源:黑马程序员 浏览量:
所谓SQL注入就是把SQL命令人为地输入URL、表格域或者其他动态生成的SQL查询语句的输入参数中,最终达到欺骗服务器执行恶意的SQL命令。
假设某个网站通过网页获取用户输入的数据,并将其插入数据库。正常情况下的URL地址如下。
http://localhost/id=222
此时,用户输入的id数据222会被插入数据库执行下列SQL语句。
select * from users where id = 222
但是,如果我们不对用户输入数据进行过滤处理,那么可能发生SQL注入。例如,用户可能输入下列URL。
1=1
此时用户输入的数据插入到数据库后执行的SQL语句如下。
select * from users where id = '' or '1'='1'
通过比较两个SQL语句,发现这两条SQL查询语句意义完全不同,正常情况下,SQL语句可以查询出指定id的用户信息,但是SQL注入后查询的结果是所有用户信息。
SQL注入是风险非常高的安全漏洞,我们可以在应用程序中对用户输入的数据进行合法性检测,包括用户输入数据的类型和长度,同时,对SQL语句中的特殊字符(如单引号、双引号、分号等)进行过滤处理。
值得一提的是,由于SQL注入攻击的Web应用程序处于应用层,因此大多防火墙不会进行拦截。除了完善应用代码外,还可以在数据库服务器端进行防御,对数据库服务器进行权限设置,降低了Web程序连接数据库的权限,撤销不必要的公共许可,使用强大的加密技术保护敏感数据,并对被读取走的敏感数据进行审查跟踪等。