///〈returns〉返回True"> ///〈returns〉返回True" />
欢迎来到天天文库
浏览记录
ID:46283382
大小:77.00 KB
页数:7页
时间:2019-11-22
《C#检查字符串,防SQL注入攻击》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、C#检查字符串,防SQL注入攻击//////检测是否含有危险字符(防止Sql注入)/////////〈returns〉返回True或falscprivateboolHasDangcrousContcnts(stringcontents){boolbRcturnValuc=false;if(contents・Length>0){//converttolowerstringsLowerStr二contents・ToLower();//RcgularExprcssio
2、nsstringsRxStr=(sands)
3、(sands)
4、(slikes)
5、(selects)
6、(inserts)
7、(dclctcs)
8、(update's[sS]・*sset)
9、(crcatcs)
10、(stablc)
11、(<[iframe
12、/iframe
13、script
14、/script])(,)
15、(sexec)
16、(sdeclare)
17、(struncate)
18、(smaster)
19、(sbackup)(smid)
20、(scount)”;//MatchboolbisMatch=false;System・Text・RcgularExprcssions・Regex
21、sRx=newSystem・Text・RcgularExprcssions・Regex(sRxStr);bisMatch=sRx.IsMatch(sLowerStr,0):if(bisMatch)bReturnValue=true:returnbReturnValue;}在解决SQLInjection的可行方案中,基于正则表达式的方案不予考虑,理市有:1、即使使用了RegexOptions.Compile选项,正则表达式的性能也不很理想,尤其是在“流量巨大”的网站中很可能会造成性能瓶颈。2、过滤的范围很难把握,不是过宽就是过窄。另一方面,这个表达式对〃exec〃开头的字符串却无能为力。如果
22、这个表达式可以只是针对某一个或几个参数进行验证,这样却必须保证对所有其他的输入参数都写对应的表达式来过滤。可以使用的方案主要有:1、使用SqlParamctcr类2、在数据库上增加一个抽象层次,防止直接对数据库的操作3、在数据库方面,应用程序使用专门的帐户,设置其对应的权限,一定不要用管理员4、避免拼接字符串如果实在没有法要用到拼接,就用SP_EXECUTESQL系统存储过程防止SQL注入例如:SQLcodedeclare@uscridintset@uscrid=1declare@sqlStrnvarchar(1000),@paramnvarchar(400)set@sqlStr=,sel
23、ect*fromtablewhere[userid]=@tuscrid,//这里可以拼接字符串,我这里简单点哈set@param=,@tuseridint,executesp_executesql@sqlstr,@param,@tuscrid=@uscrid//变量替换这种方式的字符串并接就不会有SQL注入的问题。stringsRxStr=@,z(sands)?(sands)?(slikcs)?(sclccts)?(inscrts)?(dclctcs)?(update's[sS]・*sset)?(creates)?(stable)?(<[iframe?/ifra
24、me?script?/script])?(')?(scxcc)?(sdcclarc)?(struncatc)?(smastcr)?(sbackup)?(smid)?(scount),z;明使用存储过程在防止此类攻击有很好的效果,因为通常它会对输入参数进行类型转化,这些参数只可能是字段值,而不会被理解为sql语句中的一部分。此类方法就是在全局Application类的Application_BcginRcqucst方法中对用户输入的数据进行过滤,滤去不应该出现在地址栏中的Sql敏感单词。一、若aps.netI程中没有全局类,则新建一个全局应用程序类;二、为此类添加以下方法,Sq
25、lStr就是要屏蔽的Sql关键字,可以根据需要变化其中内容。privateboolProccssSqlStr(stringStr){boolRcturnValuc=true;tryif(Str!=〃〃)stringSqlStr^select*
26、and,lor*
27、insertinto
28、dclctcfrom
29、altcrtablc
30、update
31、crcatctablc
32、crcatcvicw
33、dropvicw
34、crcatcind
此文档下载收益归作者所有