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

asp.net里如何防 'or'='or' 在线等待~~

楼主hxylqm6()2006-07-03 09:48:02 在 .NET技术 / ASP.NET 提问

ASP。NET中具体应该怎么做。。。小弟菜鸟一只,大侠们尽量说仔细些   在线等 问题点数:20、回复次数:96Top

1 楼hxylqm6()回复于 2006-07-03 09:49:59 得分 0

我SQL语句是这么写的:  
  select   *   from   AdminInfo   where   UserName='"+TextBox1.text+"'   and   PassWord='"+TextBox2.Text+"'  
   
  应该如何修改啊?  
   
  Top

2 楼WeekZero(∮小气的鬼∮)回复于 2006-07-03 09:52:46 得分 0

http://weekzero.cnblogs.com/archive/2005/12/19/300208.htmlTop

3 楼hxylqm6()回复于 2006-07-03 09:55:13 得分 0

楼上哥哥发的文章   看不太懂啊~~~本人实在很菜,能不能详细告诉我应该怎么做Top

4 楼liujiweijun(流流)回复于 2006-07-03 09:56:08 得分 0

SQL漏洞Top

5 楼francsescoli(我爱世界杯)回复于 2006-07-03 09:56:27 得分 0

使用存储过程,可以解决SQL注入攻击问题,把你的这个语句写成存储过程调用。  
  或者使用这个方法,去掉非法字符,可以更改正则表达式来符合自己。  
  public   static   string   InputText(string   text,   int   maxLength)  
                  {  
                          text   =   text.Trim();  
                          if   (string.IsNullOrEmpty(text))  
                                  return   string.Empty;  
                          if   (text.Length   >   maxLength)  
                                  text   =   text.Substring(0,   maxLength);  
                          text   =   Regex.Replace(text,   "[\\s]{2,}",   "   "); //two   or   more   spaces  
                          text   =   Regex.Replace(text,   "(<[b|B][r|R]/*>)+|(<[p|P](.|\\n)*?>)",   "\n"); //<br>  
                          text   =   Regex.Replace(text,   "(\\s*&[n|N][b|B][s|S][p|P];\\s*)+",   "   "); //&nbsp;  
                          text   =   Regex.Replace(text,   "<(.|\\n)*?>",   string.Empty); //any   other   tags  
                          text   =   text.Replace("'",   "''");  
                          return   text;  
                  }Top

6 楼WeekZero(∮小气的鬼∮)回复于 2006-07-03 09:56:36 得分 0

string   a   =   TextBox1.text.CompareTo("")   ==   0   ?   ""   :   TextBox1.text.Replace("'",   "’");  
  string   b   =   TextBox2.text.CompareTo("")   ==   0   ?   ""   :   TextBox2.text.Replace("'",   "’");  
   
  select   *   from   AdminInfo   where   UserName='"+a+"'   and   PassWord='"+b+"'  
   
   
  这个就可以这样来处理了Top

7 楼cic_wxf(我憎恨这个社会,但是不想报复这个社会)回复于 2006-07-03 09:58:07 得分 0

使用参数可以避免  
  比如   "select   *   from   table   where   username=@username"  
  然后给@username赋值就可以了Top

8 楼saintqiqi(钻石星辰(www.saintzone.net))回复于 2006-07-03 09:58:08 得分 0

<SCRIPT   language="JavaScript">  
  function   IsValid(   oField   )  
  {  
  re=   /select|update|delete|exec|count|'|"|=|;|>|<|%/i;  
  $sMsg   =   "请您不要在参数中输入特殊字符和SQL关键字!"  
  if   (   re.test(oField.value)   )  
  {  
  alert(   $sMsg   );  
  oField.value   =   '';  
  oField.focus();  
  return   false;  
  }  
  }  
  </SCRIPT>Top

9 楼jijl2001(jijl2001)回复于 2006-07-03 09:59:29 得分 0

传参的时候过滤一下就行了,还有有参数式的,不要拼sql语句Top

10 楼hxylqm6()回复于 2006-07-03 10:00:14 得分 0

哇   我才给20分就这么多哥哥帮忙,感动的哇哇哭Top

11 楼hxylqm6()回复于 2006-07-03 10:00:59 得分 0

个人还是喜欢   javascript   做判断。Top

12 楼lizheng__114(浪淘沙)回复于 2006-07-03 10:08:20 得分 0

对于sql注入,其实是个老生常谈的问题,解决的办法有很多  
  我用的办法就是写个类,对于传过来的参数进行判断,用replace方法进行安全过滤  
  如:replace("'","");等等,进行一系列的判断后,被sql注入的机会就会大大降低  
  再就是用存储过程,声明变量类型后,被sql注入的机会也比较小了  
  相关资料去google搜索:sql注入       资料太多太多Top

13 楼mendel(风逍遥)回复于 2006-07-03 10:12:34 得分 0

你把空格过滤成&nbsp;就行了Top

14 楼jimu8130(火箭的未来在哪里?)回复于 2006-07-03 10:13:46 得分 0

个人还是喜欢   javascript   做判断?  
  ==!  
  要是用js来作不划算啊,何况就算你能避免了or   or   ,那么还有其他情况了?比如or   1=1了?  
  象使用参数能尽量避免,   "select   *   from   table   where   username=@username"然后给@username赋值就可以了;sql注入漏洞防不胜防啊Top

15 楼hxylqm6()回复于 2006-07-03 10:15:46 得分 0

还是用   javascript做判断吧。那位哥哥能详细写段完整代码!!  
  照顾下我这初学的小菜鸟Top

16 楼heyidan(gopee)回复于 2006-07-03 10:17:08 得分 0

方法1  
  select   *   from   AdminInfo   where   UserName='"+TextBox1.text.Replace("'","''")+"'   and   PassWord='"+TextBox2.Text.Replace("'","''")+"'  
  方法2  
  使用參數  
  comm.Paremeters.Add("@userName",SqlDbType.varchar).Value=Textbox1.text;  
  comm.Paremeters.Add("@passWord",SqlDbType.varchar).Value=Textbox2.text;  
  comm.commandText="select   *   from   AdminInfo   where   UserName=@userName   and   PassWord=@passWord";  
  這2种方法都可以防止sql注入式攻擊Top

17 楼saintqiqi(钻石星辰(www.saintzone.net))回复于 2006-07-03 10:17:59 得分 0

你去  
  http://www.saintzone.net/secure/login.aspx  
  查看源文件就知道了Top

18 楼teacher1998(英语+asp.net+MsSQL)回复于 2006-07-04 08:23:43 得分 0

记号Top

19 楼wls12342004(青青子木)回复于 2006-07-04 08:35:56 得分 0

用参数形式Top

20 楼coolxyq(锦上添花)回复于 2006-07-04 08:53:43 得分 0

我就不用字符转换,这代码你们谁能破的了?谁告诉你们非得判断用户?  
  "select   *   from   user   where   pwd='"   +MD5(pwd)+"'"  
  if(dr["user"]==user){  
   
  }  
  联系qq:21536535Top

21 楼coolxyq(锦上添花)回复于 2006-07-04 08:57:13 得分 0

你就用'or'='or'做用户,"and   select   delete"做密码都   没问题  
  我习惯于不给机会  
  交个朋友:21536535Top

22 楼sung_yuri(北京人)回复于 2006-07-04 08:57:48 得分 0

呵呵。。这牛人用什么MD5不要充高手啊Top

23 楼gngnandgngn(仗义执言 )回复于 2006-07-04 08:58:16 得分 0

用户名和密码禁止空格,   然后查询时把空格过滤掉,   应该就能防止注入式攻击了Top

24 楼coolxyq(锦上添花)回复于 2006-07-04 09:02:50 得分 0

md5只是代表我加密而已,事实上我在网上随便下了个md5软件,然后做的时候把他改的面目全非,验证时候连上用户名加密到192位,亲爱的sung_yuri(81年的我们),我只是说个思想而已,没必要抓芝麻放西瓜吧?还是我的做法确实有问题?Top

25 楼junzhang4008(程序可以让尸体动起来)回复于 2006-07-04 09:06:30 得分 0

哈哈。直接字符替换把      
   
  把所有的非法字符全部过滤之后在进行sql查询    
   
  '过虑非法字符  
  ParaValue   =   replace(ParaValue,"'","")    
  ParaValue   =   replace(ParaValue,"select   ","")  
  ParaValue   =   replace(ParaValue,"insert   ","")  
  ParaValue   =   replace(ParaValue,"delete   ","")  
  ParaValue   =   replace(ParaValue,"count(","")  
  ParaValue   =   replace(ParaValue,"drop   table   ","")  
  ParaValue   =   replace(ParaValue,"update   ","")  
  ParaValue   =   replace(ParaValue,"truncate   ","")  
  ParaValue   =   replace(ParaValue,"asc(","")  
  ParaValue   =   replace(ParaValue,"mid(","")  
  ParaValue   =   replace(ParaValue,"char(","")  
  ParaValue   =   replace(ParaValue,"xp_cmdshell","")  
  ParaValue   =   replace(ParaValue,"exec   master","")  
  ParaValue   =   replace(ParaValue,"net   localgroup   administrators","")  
  ParaValue   =   replace(ParaValue,"   and   ","")  
  ParaValue   =   replace(ParaValue,"net   user","")  
  ParaValue   =   replace(ParaValue,"   or   ","")  
  Top

26 楼coolxyq(锦上添花)回复于 2006-07-04 09:09:33 得分 0

还有密码必须加密,这已经是常识了啊,难道不是么?  
  难道你们为了展示自己的正则表达式实力,就不用加密功能?Top

27 楼kaijier(<空杯子>)回复于 2006-07-04 10:12:41 得分 0

典型“问题复杂化”Top

28 楼yesur(夜隼)回复于 2006-07-04 10:16:22 得分 0

永远不要拼凑SQL语句,Top

29 楼belllab(菜鸟)回复于 2006-07-04 10:49:11 得分 0

coolxyq(锦上添花)的用法太单一了点,一是只允许一个字段进行查询,二是用了加密方式,特指在这登录的这没问题,但如果用在其它的查询的地方时就会出问题,一是查询肯定不止一个条件,那就肯定会用到AND   OR等,二是数据字段不可能去加密吧?Top

30 楼coolxyq(锦上添花)回复于 2006-07-04 11:03:13 得分 0

第一:lz问的只是登陆这块,我也只是针对登陆,而且能绝对破解sql注入  
  第二:单一的程序功能少,但漏洞也少  
  第三:要实现复杂查询的话,那就看谁的代码漏洞小了,这方面我研究少,不做评论Top

31 楼coolxyq(锦上添花)回复于 2006-07-04 11:05:45 得分 0

而且我写的程序思想比较通用,就算你以后用jsp。net,php100等等都能用Top

32 楼shamao(稳重,踏实,责任)回复于 2006-07-04 12:05:29 得分 0

mkTop

33 楼phommy(石头,竹子,诗)回复于 2006-07-04 14:32:12 得分 0

我就不用字符转换,这代码你们谁能破的了?谁告诉你们非得判断用户?  
  "select   *   from   user   where   pwd='"   +MD5(pwd)+"'"  
  if(dr["user"]==user){  
   
  }  
  联系qq:21536535  
   
  --------------  
   
  如果有用户设了同样的密码呢...    
   
  防登录时的SQL注入,只要过滤单引号就足够了~Top

34 楼llainn(得之不幸,失之不忧.)回复于 2006-07-04 14:45:27 得分 0

使用參數  
  comm.Paremeters.Add("@userName",SqlDbType.varchar).Value=Textbox1.text;  
  comm.Paremeters.Add("@passWord",SqlDbType.varchar).Value=Textbox2.text;  
  comm.commandText="select   *   from   AdminInfo   where   UserName=@userName   and   PassWord=@passWord";  
  Top

35 楼VincentLiang(梁俊)回复于 2006-07-04 14:54:44 得分 0

將   TextBox2.Text中的内容,一個單引號,替換成兩個單引號Top

36 楼myminimouse(坚决不用baidu)回复于 2006-07-04 14:57:09 得分 0

永远不要拼凑SQL语句,  
  Top

37 楼coolxyq(锦上添花)回复于 2006-07-04 15:09:29 得分 0

回答phommy(顽石宫主)    
  办法1.   pwd=同时加密user和pwd  
  办法2。循环相同密码,然后判断用户  
  Top

38 楼cat_hsfz(我的新Blog在http://cathsfz.cnblogs.com)回复于 2006-07-04 16:32:37 得分 0

防止注入漏洞的方法很简单,把所有"'"都replace为"''"就可以了,不需要复杂的正则表达式匹配。只要做了这个replace,就不能通过手动输入单个"'"来关闭你的字符串,这样无论别人之后跟的是"or   true"或者什么的,都一律还是被当作字符串内容来处理,直到遇到你原本的"'"才承认关闭字符串。  
   
  当然,人手去replace的话,很可能你会忘记为某些地方添加replace,所以ADO.NET的标准做法是用SqlCommand(或者其他数据库的Command类),然后让它对你的Parameter进行界限符与转义符的处理。Top

39 楼mingwj1980()回复于 2006-07-04 21:51:48 得分 0

markTop

40 楼caicaibao(菜菜(包))回复于 2006-07-04 22:16:31 得分 0

cat_hsfz(我的Blog在http://purl.oclc.org/NET/cathsfz)   说的非常对,自己写个类写对SQL的Parameter进行replace就可以了,没必要那么复杂Top

41 楼mextb1860()回复于 2006-07-05 00:01:22 得分 0

使用SQL参数就可以了Top

42 楼chinank(中国南开)回复于 2006-07-05 08:21:00 得分 0

难为楼主了。就是个注入的问题,正如大家所言,replace就可以了,针对你的问题,只需要把单撇替换位中文的单引号就没有问题了,诸如此类的注入还有多种,需要你慢慢体会了。Top

43 楼lhx1977(清水无鱼)回复于 2006-07-05 10:09:01 得分 0

使用存储过程是比较好   的选择。  
  Top

44 楼guaigaihu(三根金发)回复于 2006-07-05 10:55:41 得分 0

就是在输入时,去掉用户输入的单双引号,等于号Top

45 楼calfenyin(小钢哥)回复于 2006-07-05 11:05:00 得分 0

sqlcommand才是王道Top

46 楼boyd1985(波伊德乐园->http://www.boyd.cn)回复于 2006-07-05 11:36:34 得分 0

可以考虑用加密方法,像MD5、HASHTop

47 楼nickppa(张)回复于 2006-07-05 11:41:35 得分 0

这种问题就结贴了吧,已经好几个人说了用传参数的方式来搞了,还加密,换字符。。。Top

48 楼zwrtv(蝙蝠)回复于 2006-07-05 11:52:31 得分 0

收藏备用Top

49 楼smile9961(good life)回复于 2006-07-05 11:53:05 得分 0

同意catTop

50 楼lincai(隐身)回复于 2006-07-05 12:26:25 得分 0

用参数才是王道Top

51 楼kgdiwss(∮明天去要饭)回复于 2006-07-05 12:33:01 得分 0

把取得的参数过滤一下就好喽.没什么难的.Top

52 楼tabris17(四不象)回复于 2006-07-05 13:07:50 得分 0

只要把一个单引号替换成2个就可以了  
   
   
  无需其他过滤  
   
   
  特别是过滤sql关键字,纯属不懂装董Top

53 楼hsingbo()回复于 2006-07-05 13:24:45 得分 0

用@就可以了!  
   
   
  ??=@??Top

54 楼ioleon13(我落日般的忧伤就像惆怅的飞鸟,惆怅的飞鸟飞成我落日般的忧伤)回复于 2006-07-05 13:25:06 得分 0

markTop

55 楼phommy(石头,竹子,诗)回复于 2006-07-05 14:13:51 得分 0

coolxyq(锦上添花)   (   )   信誉:100     2006-7-4   15:09:29     得分:   0      
         
  回答phommy(顽石宫主)    
  办法1.   pwd=同时加密user和pwd  
  办法2。循环相同密码,然后判断用户  
   
   
  受教了 感觉第1种方法非常棒!Top

56 楼hertcloud(·£孙子兵法£·)回复于 2006-07-05 14:39:04 得分 0

#region   过滤SQL参数  
  ///   <summary>  
  ///   过滤html  
  ///   </summary>  
  ///   <param   name="text"></param>  
  ///   <returns></returns>  
  public   string   FilterSQL(string   text)  
  {  
  string   validSql   =   "";  
  if   (text   !=   null)  
  {  
  text   =   text.Replace("\"",   "&quot;");  
  text   =   text.Replace(";",   "");                          
  //text   =   text.Replace("'",   "''");  
  //   text   =   text.Replace("--",   "''--''");  
  text   =   text.Replace("%25",   "");  
  text   =   text.Replace("%0a",   "");  
  text   =   text.Replace("%22",   "");  
  text   =   text.Replace("%27",   "");  
  text   =   text.Replace("%5c",   "");  
  text   =   text.Replace("%2f",   "");  
  text   =   text.Replace("%3c",   "");  
  text   =   text.Replace("%3e",   "");  
  text   =   text.Replace("%26",   "");  
   
  text   =   text.Replace("<",   "&lt;");  
  text   =   text.Replace(">",   "&gt;");  
  validSql   =   text;  
  }  
  return   validSql;  
  }  
  #endregionTop

57 楼kaijier(<空杯子>)回复于 2006-07-05 14:42:53 得分 0

晕!  
  构建SQL串前,将源单引号替换为双单引号,谁能进行所谓的“注入”,我给他磕头!  
  注:字段类型为“字符串”。Top

58 楼cbo5()回复于 2006-07-05 14:59:19 得分 0

参数  
  存储过程Top

59 楼agaovxy(啊高)回复于 2006-07-05 15:06:52 得分 0

UserName   =   Replace(Trim(Request.Form("Name")),"'","''")  
  TempUserPass   =   Replace(Trim(Request.Form("Password")),"'","''")Top

60 楼tabris17(四不象)回复于 2006-07-05 15:13:30 得分 0

phommy(顽石宫主)   (   )   信誉:100     2006-07-05   14:13:00     得分:   0      
     
     
        coolxyq(锦上添花)   (   )   信誉:100     2006-7-4   15:09:29     得分:   0      
         
  回答phommy(顽石宫主)    
  办法1.   pwd=同时加密user和pwd  
  办法2。循环相同密码,然后判断用户  
   
   
  受教了 感觉第1种方法非常棒!  
       
     
  ==========================  
   
   
  最愚蠢的方法,不懂装董的人想出来的Top

61 楼imafool(中正仁和)回复于 2006-07-05 15:29:01 得分 0

看了半天没个好的……Top

62 楼agaovxy(啊高)回复于 2006-07-05 15:30:24 得分 0

不知道那位说要用javascript验证,   难道你不怕站外提交,所以还是服务端验证好.Top

63 楼hooyke(红旗下的蛋)回复于 2006-07-05 15:38:14 得分 0

UserName   先在数据库里判断是否有匹配   如果有   再   判断是否   pwd匹配Top

64 楼leveretzhang(张忠伟)回复于 2006-07-05 15:44:56 得分 0

只要   trim()   就可以避免了Top

65 楼jazzking746(迪奥尼所思)回复于 2006-07-05 16:20:52 得分 0

coolxyq(锦上添花)   (   )   信誉:100   2006-7-4   15:09:29   得分:   0  
   
  回答phommy(顽石宫主)  
  办法1.   pwd=同时加密user和pwd  
  办法2。循环相同密码,然后判断用户  
   
   
  请教个问题   嗯   用md5加密好像不可返回   要是想要找回密码   怎么办呢?   怎么实现?  
  我在毕业设计中实现不了   直接让用户重新输入改写密码了......  
   
  想请教正规的方法   谢谢了Top

66 楼jwt3000(风)回复于 2006-07-05 16:55:13 得分 0

userdb=new   Users();  
  if(uname.LastIndexOf("'")!=-1||pwd.LastIndexOf("'")!=-1)  
  return   null;  
  else  
  return   userdb.UserLoginDB(uname,pwd);Top

67 楼sunj2ee(心态决定一切)回复于 2006-07-05 17:07:36 得分 0

使用参数最简单了Top

68 楼icuc88(职业特种兵)回复于 2006-07-05 17:19:44 得分 0

晕,就是用参数就搞定了。Top

69 楼xingdongfang(xingdongfang)回复于 2006-07-05 17:20:49 得分 0

comm.Paremeters.Add("@userName",SqlDbType.varchar).Value=Textbox1.text;  
  comm.Paremeters.Add("@passWord",SqlDbType.varchar).Value=Textbox2.text;  
  comm.commandText="select   *   from   AdminInfo   where   UserName=@userName   and   PassWord=@passWord";Top

70 楼ztwz(-_-b(偶要像海绵一样的狂吸水水!))回复于 2006-07-05 17:32:47 得分 0

markTop

71 楼xiaozhimin1978(小灰狼)回复于 2006-07-05 22:26:29 得分 0

看样子这里有很多人是原ASP程序员,在   asp   里好象必须要拼SQL语句  
   
  其实楼上已经有好几位大侠说了,用参数就可以了,不管是   SqlCommand,   OleDbCommand   还是别的什么Command   ,都可以用参数。Top

72 楼mrzj(mrzj)回复于 2006-07-05 23:01:59 得分 0

使用存储过程或者用参数传递。  
   
  二是过滤到所有的空格(20)、换行(13)、回车(10)、Tab符(9)也行。Top

73 楼ExeMan(愚公移山(笨)--精卫填海(傻))回复于 2006-07-06 00:43:37 得分 0

收藏Top

74 楼beijingbeerman(啤酒肚)回复于 2006-07-06 08:33:04 得分 0

markTop

75 楼IamRobert(罗伯特)回复于 2006-07-06 10:13:36 得分 0

说的不错,还是用传参方式更合理些,毕竟不是所有的地方都需要这么严格的校验的。Top

76 楼nanxi0532()回复于 2006-07-06 10:31:30 得分 0

正则表达式不允许空格不就行了Top

77 楼calfenyin(小钢哥)回复于 2006-07-06 11:02:18 得分 0

这么简单的问题还这么多人回复,人家现成的SqlCommand,OledbCommand不用,连加密都弄出来了,真是笑死人了  
   
  Top

78 楼DragonCity1()回复于 2006-07-06 13:09:30 得分 0

呵呵,一贯使用Parameter,很简单。Top

79 楼Edisoncat(http://www.Edisonliu.com)回复于 2006-07-06 13:32:01 得分 0

用set/getTop

80 楼Bandry(菜鸟-舍我其谁)回复于 2006-07-06 14:27:44 得分 0

把--   ;   去掉或替换掉就没问题了吧Top

81 楼levinknight(Coral)回复于 2006-07-06 14:53:03 得分 0

用参数Top

82 楼vance2005()回复于 2006-07-06 15:27:43 得分 0

过滤‘'’换成''''Top

83 楼xiaozhimin1978(小灰狼)回复于 2006-07-06 16:36:19 得分 0

用参数就完全可以搞定了,并且参数的功能比一般的拼装   sql   语句强得多,不用写什么   replace,不用过滤,不用什么正则表达式,不用。。。。。。  
   
   
  楼主快结帖啦Top

84 楼yhjwii(逍遥飘流)回复于 2006-07-06 16:46:32 得分 0

方法N多种,呵呵.正则表达式.  
  传参,替换.呵呵.Top

85 楼wenzhousun()回复于 2006-07-06 17:49:42 得分 0

upTop

86 楼nooning(nooning)回复于 2006-07-06 18:16:37 得分 0

不应该是过滤,应该是转义  
   
  对于SQL,你只要转义一个字符就可以了   那就是把   '==>''  
   
  用正则也可以,用replace当然是最方便Top

87 楼boyyao(迷失在网络 (问题不解答扣分也不结贴!))回复于 2006-07-06 19:19:19 得分 0

我想单单把单引号过滤成双引号是不够的。  
  举个例子。某站点在indes.aspx?id=1处有注入漏洞。因为id是int类型。本生可能就没有单引号。   如果注入者   在1后面在加上;   delete   form   admin   ;--这么办?  
  我想过滤注入最重要的可能就是3个字符,单引号,分号和两个连续的--。当然还有他们对应的各种编码,不过编码没试过是否可以注入。比如有些数据库可能会有内置函数返回一个特定符号什么的。。  
  以上个人看法。希望指正。。Top

88 楼loverdotnet(西瓜)回复于 2006-07-06 22:17:17 得分 0

markTop

89 楼kubbye(小蛤蟆就是我)回复于 2006-07-06 23:23:01 得分 0

实现与数据库的分离就是了,  
  Top

90 楼phommy(石头,竹子,诗)回复于 2006-07-07 08:18:13 得分 0

boyyao(迷失在网络   (问题不解答扣分也不结贴!))    
  举个例子。某站点在indes.aspx?id=1处有注入漏洞。因为id是int类型。本生可能就没有单引号。   如果注入者   在1后面在加上;   delete   form   admin   ;--这么办?  
  我想过滤注入最重要的可能就是3个字符,单引号,分号和两个连续的--。当然还有他们对应的各种编码,不过编码没试过是否可以注入。比如有些数据库可能会有内置函数返回一个特定符号什么的。。  
   
  ------------  
   
  看楼主的意思,是要防登录时的'or''='方式注入,不会涉及到int类型的问题;你提到的问题,可以通过类型转换解决。  
  --或者干脆在SQL里上引号,如果id=后面是数字的话会正常使用的。程序的健状性由try   catch或defaultRedirect维护。  
   
  我目前所知sql   server在做“=”比较时除了字符串中''转义成',没有任何转义符号所以后一个问题也可以放心~Top

91 楼Imain(imain)回复于 2006-07-07 08:19:15 得分 0

upTop

92 楼sunboyyq(yyq)回复于 2006-07-07 10:10:32 得分 0

还是这个问题火。同意:对于SQL,你只要转义一个字符就可以了   那就是把   '==>''  
  Top

93 楼johnzen(以速度突破生命)回复于 2006-07-07 10:21:31 得分 0

replace("'","")Top

94 楼seawhl(hallywang)回复于 2006-07-07 11:08:43 得分 0

java很容易解决这个问题Top

95 楼xiaozhimin1978(小灰狼)回复于 2006-07-17 11:51:55 得分 0

怎么这么多比我还菜的菜鸟啊  
   
  这种问题非常简单,居然引来了那么多人讨论来讨论去的,晕Top

96 楼job_2006(初学.net)回复于 2006-07-17 12:37:14 得分 0

感觉大家都比较关注SQL注入式攻击,呵  
   
  顶顶Top

相关问题

关键词

得分解答快速导航

  • 帖主:hxylqm6

相关链接

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

广告也精彩

反馈

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