BS 之 浅析SQL注入



前景提要:

最近浏览新闻,SQL Injection——微软Skype官网博客网站被黑客入侵

微软skype的官方博客使用的是WordPress平台,Wordpress目前是世界上最流行的博客平台,是一个免费的开源项目。通俗点说,就是一个包括多个博客模板插件,用来快速搭建独立博客网站的平台。skype博客官网就是由它所搭建而来。那么skype的侵入和SQL注入有什么关系呢?

什么是SQL注入?

首先我们来了解一下SQL注入的原理:SQL注入就是把一个正常的 SQL语句的逻辑转换成了另一种不正常的语句逻辑。举个例子,查询数据select * fromuserInfowhere id='admin' 现在我们查找名为admin的用户如果我们在后面加一个 or 1=1sql语句变成了 select * fromuserInfo where id='admin' or 1=1。这样导致了 where语句无用,sql语句则变成select * from userInfo,从而查询出了所有的用户信息。网络黑客利用这一点对网站进行破析,从而达到对数据库信息的获得和操作。 

如何防止SQL注入?

牛腩新闻发布系统和机房收费系统都利用三层进行搭建,D层则自然要涉及对数据库增删改查等操作。举个例,我们之前在编程过程中写SQL查询语句的时候,会很自然地写成select * from User where userId=1,查询的结果自然会出来用户ID1的所有用户信息。虽然这个查询操作不是谁都有这个权限,但是入侵者就会利用各种手段,获得表名等查询条件,从而拼接出相应的SQL语句,使语义发生改变。牛腩中也是利用这种方式从而对某些数据进行非法删除。所以在做机房收费的过程中,我们利用传参的方式,有效的减少了SQL注入的可能性。

传参为什么能防止SQL注入?

进行参数传递。进行参数传递的好处就在于可避免SQL注入的发生。例如select *from User where userId=1,把userId作为一个参数传入SQL语句,select * from User where userId= @userId,对参数进行赋值传递。两者本来是不同的路径实现相同的查询功能,而第一种方式便可以通过拼接字符串,参数化查询的优点就是它对向数据库操作的语句进行了参数化过滤,如果传递的参数是正常值,那么就可以进行正常的传入、查询、输出操作。如果涵盖了某些关键字,查询出来的数据是不可被看到的(比如大量的用户密码),那就对其进行过滤,使之不得已显示。这也是为什么我们重构机房要求传实体。


注意参数太多的情况之下,不用每个实体都去传值,利用封装的原理,以表为单位,将每个表中的字段(实体)封装到该表中,比如user表,直接写好实体层,调用的时候直接user.userNameok了。


总言之,防止SQL注入的方法有很多,例如限制用户输入信息的类型和长度等等,我们现在所接触到的比较有限,经过长时间的积累学习,以项目实战为驱动,相信会有越来越多的收获。

 

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值