正常访问状态! 设为首页 | 加入收藏夹 | 浏览历史  
  http://www.guosp.com
 碧海澜涛居
  海纳百川,有容乃大。壁立千刃,无欲则刚!
 
 
关键词:
  网站首页 | 关于本站 | 技术资料 | 美文日志 | 读书收藏 | 影视收藏 | 软件收藏 | 摄影相册| 留言板 
  技术资料 >> ASP.Net资料库 关闭(快捷键alt+C)
搜索标签: SqlParameter
SqlParameter用途-防止SQL注入攻击,提高安全性[转载]
[阅读次数:1968次]  [发布时间:2009年9月28日]

”不求甚解”一词,有时是在责备读书人做学问不够彻底、一知半解、不求上进等等,对自尊心强或自负的人算是很没面子,虽然我自认很努力学习.NET相关技术,至少在我自己常用的程式部分应让瞭若指掌,但我最近发现我在Parameter这个东西上是”不求甚解”,以下是分析:
如果你要新增资料到资料库,典型的ADO.NET写法如下:

strSQL1+="TestDate,TestTime,RealDate,ModelTop,ModelDown,Machine) values";
strSQL1+="(@txtTestDate,@txtTestTime,@txtRealDate,@txtModelTop,@txtModelDown,@txtMachine)" ;
SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings["SQLConnection"]);
conn.Open();
SqlCommand cmd=new SqlCommand();
cmd.Connection=conn;
cmd.CommandText=strSQL1;
cmd.Parameters.Add("@txtTestDate",SqlDbType.NVarChar,10).Value=myRow["TestDate"];
cmd.Parameters.Add("@txtTestTime",SqlDbType.NVarChar,8).Value=myRow["TestTime"];
cmd.Parameters.Add("@txtRealDate",SqlDbType.NChar,10).Value=new PublicClass().GetDate();
cmd.Parameters.Add("@txtModelTop",SqlDbType.NVarChar,5).Value=myRow["ModelTop"];
cmd.Parameters.Add("@txtModelDown",SqlDbType.NVarChar,5).Value=myRow["ModelDown"];
cmd.Parameters.Add("@txtMachine",SqlDbType.NVarChar,20).Value=myRow["Machine"];
... ... ...

或者你会用传一段SQL语法用+加字号相连
以上有什麽问题呢?
1.我一直无法明确告诉那些直接带SQL语法字串的人,不要用字串相加的方法,应该要用SqlParameter
2.我又无法明确告诉他们SqlParameter到底有什麽好处,且SqlParameter字串明显又臭又长
3.微软MCSD.NET只教大家用Parameter参数,好嘛!用参数才是纯.NET人,我就用吧!
4.国内外的书籍也不曾有作者提过为什麽要用Parameter参数(可能是我看书不够多)
5.我竟没想过要去追根究底为何要使用Parameter参数
如此"溷"过了好几年,什麽时候才觉醒?在写ASP.NET 2.0资料来源控制项时!为何会突然想到?因为被Shock了一下,请看我书中的节录:
ASP.NET 2.0对于资料控制项参数又增加多达六种参数,我第一次看到心裡只有一个感觉:「天哪,太过份了吧!」以前的Parameter带参数虽然可以保持弹性,但是程式码却比SQL Statement又臭又长,现在微软竟肆无忌惮地为扩充技术而扩充,把原本一种Parameter变成六个,请问程式设计师不累死才怪,哪裡学得完?以上是直觉想法没错,但在发怒前我先冷静一下给微软一个辩驳的机会,其实参数除了弹性之外,最重要的理由是「安全性!」所谓的安全性是为了防范SQL Injection的攻击,而SQL Injection发生的原因有三点:
(1)资料输入没有经过验证,或很薄弱的验证。
(2)以动态SQL Statement建构SQL命令,让有心人可随意传入SQL命令破坏资料库(这是非常多的程式设计师通病,请儘量不要使用可接受任意SQL命令方式来设计你的程式,只消一道Drop database命令就可能彻底毁灭掉资料库)。
(3)使用过大权限的帐号来存取资料库,而非适度的权限(如程式以sa来进行登入)。
以上三点平心而论你我大家都可能会犯,而且也是许多专桉与程式设计师仍然广泛使用的方式,如此在企业资讯安全当道的时代,若您没有特别用心防护无异留给骇客一个看似微小却比天还大的漏洞,一如教育部或联考放榜十万考生资料及成绩可以被随意窜改,资讯人员技术简直是被看笑话,但就我个人观点并不是安全技术不够成熟,而是对安全性的投入太少、无知、没有专家看管或根本无安全性可言,等发生重大机密外洩或资料遭窜改才惊觉安全性风暴已狂捲企业内部,下台的下台、处分的处分,其实可以不必这样的,现在来看看使用Parameter参数能够改善些什麽?Parameter参数除了动态提供传值的作用外,最重要的是它会执行几项工作:(1)检查参数的型别(2)检查参数的长度(3)保证Injected Code在资料库中会被当成纯文字而不是可以执行的SQL命令,因此参数进行了以上三项安全性检查,将安全性强化到一定水准之上,以下是由Parameter衍生出六种新的参数型态:

从上面的SQL Injection安全性议题及参数又区分成六种更加明确的类型来看,使用新参数型态的确可以大幅增加安全性防护,比如说系统如果接受的是SessionParameter型态,当您喂的是CookieParameter或QueryStringParameter的型态势必无法成功,或字串长度不合都会被系统挡掉,更别说骇客想用插入SQL命令的方式来攻击你的资料库了,故基于以上种种论述,ASP.NET 2.0的新六种参数型态在安全性方面大大加分,与安全性至上前提相较之下,参数的程式码多写几行根本是微不足道的。


看过这篇后,至少我及没注意到的人不会再不求甚解了^^
 





本页地址: [复制地址]
该页内容非本站原创 收藏自:http://www.tzwhx.com/newOperate/Html/3/31/311/18423.html
返回顶部 关闭(快捷键alt+C)
评论统计(0条)| 我要评论
暂无评论内容!
我要评论 
我要评论: 带*部分需要填写
 姓名称呼: * 请填写您的姓名或呢称
联系方式: QQ,MSN,Email都可以,方便交流 (仅管理员可见)
 评论内容: * 不超过100字符,50汉字
验证码:
    
  推荐链接
  最近更新  
·Host 'XXX' is not allowed...
·Win2008或IIS7的文件上传大...
·IIS7.0上传文件限制的解决方...
·测试信息2015-03-11
·asp.net中处理图片
·ASP.NET之Web打印-终极解决...
·Asp.net下C#调用Word模版实...
·asp.net下将页面内容导入到...
·asp.net导出为pdf文件
·asp.net生成pdf文件
·FCKeditor 文本编辑器的使用...
·ASP.NET 将数据生成PDF
·asp.net2.0导出pdf文件完美...
·AspJpeg的安装与测试
·JS验证浏览器版本对IE11的支...
  热门浏览  
·IE8和IE9出现“此网页上的问...
·无线路由器密码破解,教你断...
·js替换所有回车换行符
·QQ/MSN在线交流代码
·如何取消键盘上的一些快捷键...
·IE弹出“中国工商银行防钓鱼...
·win7声音小的解决方法
·webdav漏洞的利用
·强制两端对齐的函数或者CSS...
·win7下成功安装sql server ...
·显示器分辨率调的过高导致电...
·天诺时空技术技术论坛
·js验证手机号码格式
·JS展开和收缩效果(二)
·本地计算机上的 MSSQLSERVE...
  碧海澜涛居
网站首页关于本站站长简介开发案例技术资料美文日志摄影相册读书收藏影视收藏留言板
版权所有:碧海澜涛 QQ:410436434 Email:shaopo_guo@163.com 苏ICP备15000526号
免责声明:本站为个人网站,站内所有文字、图片等各类资料均为个人兴趣爱好所收集,不用作任何商业用途,亦不保证资料的真实性,若有因浏览本站内容而导致的各类纠纷,本站也不承担任何责任。本站部分内容来自互联网,如有涉及到您的权益或隐私请联系站长解决。