xuxinqiujiao 发表于 2008-7-18 13:05:35

用户登陆测试时考虑sql注入的具体用例是什么,能否指教一下

测用户登陆时,要考虑sql注入情况,什么1 or 1=1 的,不太明白,高手能否指教一二。具体用例是什么

xuxinqiujiao 发表于 2008-7-18 16:03:06

呜呜,为什么没人回呢,指教一下啊

水印无痕 发表于 2008-7-18 17:24:37

其实我只是打个比方
意思是不要光局限与字符组合
能测的方面是非常多的
至于sql注入
一般来说现在的网站也不会做的那么弱智
但是有的时候还是有可能有这个问题的

贴段文章给你看
SQL注入式攻击是利用是指利用设计上的漏洞,在目标服务器上运行Sql命令以及进行其他方式的攻击   
动态生成Sql命令时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因。   
比如:   
    如果你的查询语句是select   *   from   admin   where   username='"&user&"'   and   password='"&pwd&"'"   
   
    那么,如果我的用户名是:1'   or   '1'='1   
    那么,你的查询语句将会变成:   
    select   *   from   admin   where   username='1   or   '1'='1'   and   password='"&pwd&"'"   
    这样你的查询语句就通过了,从而就可以进入你的管理界面。   
   
所以防范的时候需要对用户的输入进行检查。特别式一些特殊字符,比如单引号,双引号,分号,逗号,冒号,连接号等进行转换或者过滤。   
   
需要过滤的特殊字符及字符串有:   
     net   user   
     xp_cmdshell   
     /add   
     exec   master.dbo.xp_cmdshell   
     net   localgroup   administrators   
     select   
     count   
     Asc   
     char   
     mid   
     '   
     :   
     "   
     insert   
     delete   from   
     drop   table   
     update   
     truncate   
     from   
     %   
   
下面是我写的两种关于解决注入式攻击的防范代码,供大家学习参考!   
js版的防范SQL注入式攻击代码~:   
   
     
<script   language="javascript">   
<!--   
    var   url   =   location.search;   
    var   re=/^\?(.*)(select%20|insert%20|delete%20from%20|count\(|drop%20table|update%20truncate%20|asc\(|mid\(|char\(|xp_cmdshell|exec%20master|net%20localgroup%20administrators|\"|:|net%20user|\'|%20or%20)(.*)$/gi;   
    var   e   =   re.test(url);   
    if(e)   {   
      alert("地址中含有非法字符~");   
      location.href="error.asp";   
    }   
//-->   
<script>   
   
   
   
asp版的防范SQL注入式攻击代码~:   
   
<%   
On   Error   Resume   Next   
Dim   strTemp   
   
If   LCase(Request.ServerVariables("HTTPS"))   =   "off"   Then   
    strTemp   =   "http://"   
Else   
    strTemp   =   "https://"   
End   If   
   
strTemp   =   strTemp   &   Request.ServerVariables("SERVER_NAME")   
If   Request.ServerVariables("SERVER_PORT")   <>   80   Then   strTemp   =   strTemp   &   ":"   &   Request.ServerVariables("SERVER_PORT")   
   
strTemp   =   strTemp   &   Request.ServerVariables("URL")   
   
If   Trim(Request.QueryString)   <>   ""   Then   strTemp   =   strTemp   &   "?"   &   Trim(Request.QueryString)   
   
strTemp   =   LCase(strTemp)   
   
If   Instr(strTemp,"select%20")   or   Instr(strTemp,"insert%20")   or   Instr(strTemp,"delete%20from")   or   Instr(strTemp,"count(")   or   Instr(strTemp,"drop%20table")   or   Instr(strTemp,"update%20")   or   Instr(strTemp,"truncate%20")   or   Instr(strTemp,"asc(")   or   Instr(strTemp,"mid(")   or   Instr(strTemp,"char(")   or   Instr(strTemp,"xp_cmdshell")   or   Instr(strTemp,"exec%20master")   or   Instr(strTemp,"net%20localgroup%20administrators")   or   Instr(strTemp,":")   or   Instr(strTemp,"net%20user")   or   Instr(strTemp,"'")   or   Instr(strTemp,"%20or%20")   then   
    Response.Write   "<script   language='javascript'>"   
    Response.Write   "alert('非法地址!!');"   
    Response.Write   "location.href='error.asp';"   
    Response.Write   "<script>"   
End   If   
%>   
   
   
   
   
C#   检查字符串,防SQL注入攻击   
这个例子里暂定为=号和'号   
bool   CheckParams(params   object[]   args)   
{   
          string[]   Lawlesses={"=","'"};   
          if(Lawlesses==null||Lawlesses.Length<=0)return   true;   
          //构造正则表达式,例:Lawlesses是=号和'号,则正则表达式为   .*[=}'].*   (正则表达式相关内容请见MSDN)   
          //另外,由于我是想做通用而且容易修改的函数,所以多了一步由字符数组到正则表达式,实际使用中,直接写正则表达式亦可;   
          string   str_Regex=".*[";   
          for(int   i=0;i<   Lawlesses.Length-1;i++)   
                  str_Regex+=Lawlesses+"|";   
          str_Regex+=Lawlesses+"].*";   
          //   
          foreach(object   arg   in   args)   
          {   
                  if(arg   is   string)//如果是字符串,直接检查   
                  {   
                        if(Regex.Matches(arg.ToString(),str_Regex).Count>0)   
                        return   false;   
                  }   
                  else   if(arg   is   ICollection)//如果是一个集合,则检查集合内元素是否字符串,是字符串,就进行检查   
                  {   
                        foreach(object   obj   in   (ICollection)arg)   
                        {   
                                  if(obj   is   string)   
                                  {   
                                          if(Regex.Matches(obj.ToString(),str_Regex).Count>0)   
                                          return   false;   
                                  }   
                        }   
                  }   
          }   
          return   true;   
   

xuxinqiujiao 发表于 2008-7-20 19:39:28

谢谢水印无痕,记住你的名字了,谢谢哦:handshake

david.wang 发表于 2008-7-20 23:08:42

学习中,

Lydia313 发表于 2011-9-22 18:50:56

请问 中如何测试 cookie 中的 sql注入问题

lllxmz 发表于 2011-10-15 01:04:16

回复 6# Lydia313


    不懂啊

edison1256 发表于 2011-10-28 11:06:27

先标记下,然后研究研究
页: [1]
查看完整版本: 用户登陆测试时考虑sql注入的具体用例是什么,能否指教一下