CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

请高手指点我写的防注入代码,看会出现哪些问题,哪些还可以改进?

楼主xuehan(冬天的雪)2005-06-03 15:44:47 在 .NET技术 / ASP.NET 提问

请高手指点我写的防注入代码,看会出现哪些问题,哪些还可以改进?虚心学习中……  
  另外:我想把这段代码写成类的一个方法,或写成公用函数,但一执行到转向(Response.Redirect("/erro.htm");)时就出错,提示的错误不一样,总之就是不能在这两种方式中转向,所以我现在在每个要用的页面都要加这段代码,真累,各位有什么更好的方法啊??  
   
  private   string   CheckInputStr(string   str)  
  {  
  string   jscrip_str=str;  
  string   delimStr   =   "   ";  
  char   []   aaaa   =   delimStr.ToCharArray();  
   
  string[]   strArray1   =   jscrip_str.Split(aaaa[0]);  
  string[]   strArray2   =   {"and","or","set","exec","execute","declare","select","insert","delete","drop","update","truncate","asc(","mid(","count(","char(","xp_cmdshell","net   localgroup","backup   database","master","sqloledb","db_name","openrowset","opendatasource","triger","jobs","sp_addlogin","sp_addsrvrolemember"};  
   
  jscrip_str=jscrip_str.Replace("'","‘").Replace(";",";").Replace(",",",").Replace("--","--").Replace("+","+").Replace("&&","").Replace("||","||").Replace("=","=").Replace("!","!").Replace("<","〈").Replace(">","〉");  
   
   
  for   (int   i=0;i<strArray1.Length;i++)  
  {  
  for   (int   n=0;n<strArray2.Length;n++)  
  {  
  if   (strArray1[i]==strArray2[n])  
  {  
  Response.Redirect("/erro.htm");  
  }  
  }  
   
  }  
   
  return   jscrip_str;  
  } 问题点数:0、回复次数:4Top

1 楼LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)回复于 2005-06-03 15:49:05 得分 0

http://community.csdn.net/Expert/topic/3803/3803170.xml?temp=.6236078    
   
  大家存在5点误区:    
  1、sql注入比较难防,需要替换select,delete等一打字符    
  其实对于字符型替换再多都没有替换单引号为两个单引号来的好!对于数字型替换再多都没有用,一定要类型转换。    
  2、忽略DropDownList传来的东西    
  其实是不对的,一切客户端的东西都是不可信任的,select下拉框也是!因为可以自己做一个htm提交到服务器。    
  3、access比sqlserver不安全    
  安全不安全关键看怎么用,如果sqlserver还是像access一样用,一个sa帐户的话,很明显,sqlserver比access不安全,可以直接得到表名和字段名!access反而倒安全点了,因为只能通过逐位猜解得到。    
  4、网站没有显示出错信息就说明网站是安全的    
  当有记录的时候显示记录,没有记录的时候显示找不到任何记录,通过这两种状态就可以猜解字段名了,所以网页不出错不能说明是安全的    
  5、忽略post提交的信息    
  很多人对url上传递的东西过滤严格,对于post的东西不理不睬是不对的,post的东西更加容易被注入,因为一般字段比较多    
   
  在asp.net中强烈建议通过参数来实现sql而不是sql拼接,因为就算你每一个都过滤百密难有疏    
  比如:    
   
  SqlConnection   conn=new   SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);    
                          SqlCommand   comm=new   SqlCommand("update   tb1   set   vName=@vName,iAge=@iAge   where   ID=@id",conn);    
                          SqlParameter   parm1=new   SqlParameter("@vName",SqlDbType.NVarChar,50);    
                          parm1.Value=((TextBox)e.Item.FindControl("name")).Text;    
                          SqlParameter   parm2=new   SqlParameter("@iAge",SqlDbType.Int);    
                          parm2.Value=((TextBox)e.Item.FindControl("age")).Text;    
                          SqlParameter   parm3=new   SqlParameter("@id",SqlDbType.Int);    
                          parm3.Value=this.DataGrid1.DataKeys[e.Item.ItemIndex];    
                          comm.Parameters.Add(parm1);    
                          comm.Parameters.Add(parm2);    
                          comm.Parameters.Add(parm3);    
                          conn.Open();    
                          comm.ExecuteNonQuery();    
                          conn.Close();    
   
   
  这样的代码看起来舒服而且又安全,何乐不为?    
   
  Top

2 楼Truly()回复于 2005-06-03 15:51:36 得分 0

同意楼上,参数化sql语句Top

3 楼xuehan(冬天的雪)回复于 2005-06-03 15:51:58 得分 0

我也是用的楼上的在asp.net中通过参数来实现sql而不是sql拼接,但这种方式就保证不被注入吗?  
  Top

4 楼gyf19(秋天的云)回复于 2005-06-03 16:10:56 得分 0

学习!!使用存程过程Top

相关问题

  • 对孟大侠图片显示代码的改进,请大家指点。
  • 代码在这,请指点
  • 请高人指点代码~~~~~~~
  • 写出自己的第一个五子棋,现在把代码贴出来,希望高手能指点一下,该如何进行改进。
  • 请指点下面代码的涵义
  • 五子棋代码请指点。
  • 代码求助!高手来指点啊!
  • 下面代码看不明,请指点!
  • 这句代码看不懂啊,请高手近来指点指点。
  • 请指点:哪儿有Visual C++ 例程源代码程序?

关键词

  • 代码
  • jscrip
  • replace
  • str

得分解答快速导航

  • 帖主:xuehan

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo