Web安全之:SQL注入攻击

Posted 给产品经理讲技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web安全之:SQL注入攻击相关的知识,希望对你有一定的参考价值。

不少朋友都会写SQL语句,如果你还不会写,可以看看果果以前写的文章「」,可是你造吗,SQL注入攻击是Web开发中最常见的一种安全问题,恶意攻击者可以利用它来获取数据库中的敏感信息、篡改数据,甚至可以获得系统的控制权限。产生SQL注入漏洞的原因也很简单,就是开发者没有对用户提交的内容进行过滤,导致了恶意SQL语句的执行。


我们来看个简单的栗子,假设有一个登录系统,用户在登录时提交用户名和密码,如果通过用户名和密码能从后台数据库中找到某个用户,那么就算登录成功了。可以写出这样的代码:

username = req.POST['username']

password = req.POST['password']

sql = "SELECT * FROM user_table WHERE username='" + username + "' AND password='" + password + "'"


可以看出,这个SQL语句是将查询语句和用户提交的数据拼接起来的,如果我提交的用户名是guoguo,密码是passwd123,那么这个SQL语句就是:

SELECT * FROM user_table WHERE username='guoguo' AND password='passwd123'


这样看上去很正常对吧?可是,如果我是个坏人,提交的数据是这样的,用户名填的是guoguo' -- ,密码是123,那么在后台得到的SQL语句就变成这样的了:

SELECT * FROM user_table WHERE username='guoguo' --' AND password='123'


这里就有点蹊跷了哦,我们先看前面那个SQL语句,必须是账号密码两个条件匹配上了,才会返回guoguo这个用户的信息,否则查询不到任何结果。再看第二个SQL语句,--在SQL语句中是注释符号,它后面的语句都将被无视,那么这个语句翻译成白话就是“把用户名是guoguo的用户给我找出来”,看见没?这样完全不需要知道密码,就能拿到guoguo的用户信息,继而登录guoguo的账户。


这种通过在提交数据里面写入SQL代码,巧妙改变后台SQL执行逻辑的攻击方式,就是SQL注入攻击。


如何防范SQL注入攻击呢?其实也很简单,在这个栗子中,我们将用户输入的数据进行过滤,只允许使用字母和数字,那么这个攻击就起不到任何作用了。


当然了,你也可以写更复杂的过滤规则,不过我们只需要记住一个原则就行了,永远不要相信外界输入的数据。现在扫描SQL注入的工具也有很多,上线前,多用安全工具扫一扫,防范有疏漏喔~

以上是关于Web安全之:SQL注入攻击的主要内容,如果未能解决你的问题,请参考以下文章

Web安全基础之SQL注入式攻击

Web安全之:SQL注入攻击

《白帽子讲WEB安全》学习笔记之第7章 注入攻击

WEB安全之注入攻击

web安全之sql注入综述

WEB安全之SQL注入