什么是SQL注入
有些朋友刚刚接触SQL编程,对SQL注入表示不太了解。现在在这里介绍一下什么是SQL注入和怎么预防。
操作方法
首先介绍什么是SQL注入。SQL注入是指在编程中SQL语句中参数可以通过客户端传递到数据库中执行,由于对传递内容过滤不严谨,导致SQL执行出现非预期结果。现在举例说明SQL注入。
我们现在要做一个用户登录框。可以输入用户名和密码,如果用户名和密码正确就可以成功登录,否则登录失败。界面如下:
在验证用户名和密码中可能会出现如下语句。
语句中用户名和密码会客户端传入参数。如果正常输入,那么用户名和密码正确,就会提示【真不错,恭喜你又过了一关!】。
问题出现了。此段代码中对用户输入没有进行任何的过滤和字符转换。那如果我们用户名和密码都传入 【' or '' = '】(不包含中括号,相信我,此用户名密码绝对不是保存的正确用户名和密码),会出现什么样的结果呢?
结果就是一样会提示恭喜又过了一关。为什么会这样呢?那么现在我们来分析一下。在后台程序,我们用SQL 【select * from 2user where yhm='"& a &"' and mima='"& b &"'】 验证用户名和密码。其中a和b为用户填写的用户名和密码,不明白的可以参看第二张图片整个后台验证代码。
如果我们输入的用户名和密码都为【guosange】,那么组合后SQL结果是【select * from 2user where yhm='guosange' and mima='guosange'】。但是如果我们用户名和密码输入为【' or '' = '】,那么组合后SQL结果为【select * from 2user where yhm='' or '' = '' and mima='' or '' = ''】。这个SQL其中有【or '' = ''】,这个判断导致整条SQL语句的Where条件永远为True,导致可以查出表【2user】的所有记录。从而登录成功。喜欢尝试的朋友也可以试试在用户名输入【' or '' --】,密码随意输入也可以达到效果。
这就是SQL注入。通过输入一些特殊字符,改变了你SQL语句本来的目的,达到额外的效果。那么我们应该怎么预防呢?其实很简单,只要我们禁止用户输入一些特殊字符,或者后台对这些特殊字符进行转换,或者SQL语句都写为存储过程,这样就可以避免被SQL注入攻击了