您的位置:首页 > 数据库

ado.net防止sql注入

2014-12-15 17:49 232 查看
简介:当web平台真正上线之后,遇到的问题之一就是黑客攻击的问题,攻击的手段中常用的手段就是DDOS和sql注入,关于DDOS攻击,也就是分布式拒绝服务式攻击,就是黑客黑掉大量pc机之后,发下命令,全部被黑的机器同时去访问服务器,当超出服务器的负载时,服务器就是down掉,也就达到了一定的目的,这种攻击,在程序中用技术是解决不了的,最简单的办法就是拼money,加大带宽,服务器等等,其他的方法,就不多说了,来说另一种攻击,sql注入,这种攻击,是很多古老的手段,也是简单的攻击手段,据统计,目前的服务器攻击中,大约有2成是这种攻击,这种手段的原理就是,利用web平台主要是form表单提交时留下的漏洞,通过填写特殊文本,来改变开发人员的sql语句,按照自己的意愿来执行sql,并通过web服务器的漏洞,获取sql执行的结果,来达到自己的阶段目的

1.早期sql注入

asp时期,黑客通过扫描,找到web中form提交时的漏洞,来改变执行的sql,如果这时配置服务器大意,让异常或者错误发送到客户端,则黑客可以通过这种简单的方式,获取数据库,版本,数据库名,表名,查询任意数据,更甚者,可以增删改数据,web平台也就相应的瘫痪了,现在的asp.net和新版本的iis默认情况下是不允许错误发送的客户端的,除非你强制可以发送,但是用户的输入中的sql注入,还需要我们自己来解决

2.目前sql注入

上面已经说了,目前sql注入,主要是通过,扫描form提交数据的漏洞,揣测执行的sql,通过拼接特殊的文本,来达到按照自己的意愿来执行sql的目的,这种风险主要在于执行sql前没有检查sql的合法性

3.防范

在用.net中开发web时,用到的持久层有,ado.net,ibatisnet,ef,nhibernate,早起的还有linq to sql等,下面说说自己对各个持久层防止sql注入方法的理解

ado.net 中,我们用ado.net操作数据库,最大的优点就是灵活,ado.net操作数据库,通过sqlcommand,我们可以指定文本和存储过程,两种方式,文本中我们可以自己拼接sql和使用sqlparameter,如果我们使用前一种方法,就要自己来验证用户的输入,主要是string的输入是否合法,如果我们用sqlparameter凡事,开发人员就不用担心会被sql注入了,这是因为,ado.net拼接执行的sql前,会验证sqlparameter中字符串的合法性,有效的阻止了sql注入,关于具体的防止原理,个人推测应该是,按照关键字进行处理,比如;
' - -/**/ 等字符的处理,存储过程中,也建议采用参数方式,让ado.net来为我们自动阻止sql注入

ibatisnet中,在这个办自动化orm中我们只需要在map文件中,写sql的时候,把$field$替换成#field#即可,这样框架便会自动阻止sql注入

ef,nhibernate,linq to sql 等orm框架,都是通过底层封装调用ado.net的方式来阻止sql注入的,不需要我们特殊的配置

ps:上面简单的谈了下自己对sql注入的理解,今天就到这里吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: