SQL注入式攻击实例讲解

 刚刚高中的一位同学问我一道笔试题:请简述SQL注入式攻击及其原理。
 
(Q:攻击?难道是做黑可吗??)
可以把这种行为理解成黑客行径,因为这样做的目的就是“非法获取”。
 
(Q:怎么做?)
可以按照我下面的步骤一步一步来,大家也就当一回“黑客”了。(P.S. 这可是我“独家研制”的啊~)
 
string starFire = "星火" ; // 瞧我C#学的多好
《starFire英语》大家都应该了解吧(别说你没考过CET),现在的starFire背单词的书后面会附有一个passcode,通过这个code我们能够下载配套的学习软件(号称价值¥38)。但是我们现在不想买书,就想下载怎么办?我们当然可以把那个passcode扣下来,不过这样会被“黑客”和买到这本书的读者严重BS~~那么我们就来当一回真正的“黑客”吧
大家可以先在Google上搜一下“starFire英语 下载中心”(恕我不能公布网址,要不被人家看见就不愉快了),点击进去,在上面的导航连接中找到“starFire软件”,点进去(应该到'/soft/xhsoft/index.html'路径下了)。进来后,ooh,这么多软件啊~让我们开始“黑”吧~
随便找一个,点它,就会进入下载页面。咦?~~发现了没,上面有一个“验证码”的输入框,随便输点儿东西试试,它貌似还是很管用的啊。那我们就来看看,它能不能经受住我们“注入式攻击”的考验。
在文本里输入——1'or'1'='1——横线中间的东西,然后点击“下载”。怎么样,奇妙的事情出现了吧~
 
(Q:这到底是为什么啊?)
原因解释:
在这里我先不给“SQL注入式攻击”下定义。我们知道,我们在网页上所输入的东西,最终会被提交到数据库里,当作查询条件。我们假设输入的验证码被提交到DB里面执行的语句是——Select product from t_Product where passcode='code' (这里假设"code"是接收值的变量),那么当我们提交这个查询后,变量code就会被替换为我们在文本框里输入的东西,即整个SQL语句变成——Select product from t_Product where passcode='1'or'1'='1'。这样我们再看,原先的一个字符串变成了3个,而且用“或”关系连了起来,也就是——where passcode='1'or'1'='1' 这是一个永远成立的条件!也就是说,输入这个关键字后,SQL里面的where子句将会失去作用!
再举个例子:假设公安局户籍中心用的是MySQL数据库,其中查某个公民详细信息的SQL语句是——Select * from t_Citizen where id='$id' and pwd='$pwd'(假设$id和$pwd是分别传递身份证号和查询密码的变量,MySQL中用$表示变量)。那么假如我在前台界面上输入id——1234'#——横线中间的数据,密码随意输,只要数据库中存在'1234'这个id的记录,就能查出该人的身份,而无需提供密码。这是为什么呢?我们再把输入的数据代入SQL语句——Select * from t_Citizen where id='1234'#' and pwd='$pwd'。这又是什么呢?哈~再介绍个知识点:在MySQL中,以#开头的内容被视为注释!这就不难理解了吧,where子句就变成了where id='1234'#' and pwd='$pwd'——红色加粗的部分就是注释了,也就是实际有效的查询条件就变成了where id='1234'。
 
(Q:SQL注入式攻击的危害这么大?那怎么防啊?)
这个问题问的好,不过我也不知道,我就知道在JDBC里面使用preparedStatement可以防止这个漏洞,至于其它的嘛,再问别人吧~~

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/eclipseluo/archive/2009/11/07/4782333.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值